檢查給定簽章的類別成員函數
考慮驗證一個類別是否擁有預定簽章的特定成員函數的挑戰簽章。雖然與 Scott Meyers 的《Effective C 第三版》中討論的概念相關,但這個問題需要一個獨特的解決方案。
問題和要求
與 Meyers 的場景不同,其中確保成員函數的存在對於編譯至關重要,這種情況需要靈活的方法。目的是區分實現所需成員函數的類別和未實現所需成員函數的類,從而相應地觸發不同的操作。
模板解決方案
C 11 提供了一個模板基於 的解決方案,可以有效地檢測成員函數,甚至是繼承的成員函數。提供的實作依賴is_same 特徵來檢查返回類型相容性:
#include <type_traits> // Check member function presence and return type correctness template<typename C, typename Ret, typename... Args> struct has_serialize { static constexpr bool value = std::is_same< decltype( std::declval<T>().serialize( std::declval<Args>()... ) ), Ret >::type::value; };
用法
要使用此方法,只需指定要檢查的類,以及成員函數的回傳類型與參數:
struct X { int serialize(const std::string&) { return 42; } }; std::cout << has_serialize<Y, int(const std::string&)>::value; // prints 1
以上是我的班級有這個會員功能嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!