使用自訂簽章檢查成員函數是否存在
在本文中,我們解決了確定C 類別是否擁有特定成員函數的挑戰帶有指定的簽名。與 Scott Meyers 書中討論的問題不同,這裡的目標是區分擁有和缺乏該功能的類別。
模板技巧
為了實現這一點,我們引入利用 C 11 功能的模板技巧。 has_serialize 模板結構充當主模板,並斷言第二個模板參數必須是函數類型。
函數驗證的專業化
has_serialize 模板的專業化處理實際的功能驗證。它使用兩個模板函數:
函數驗證
測試C 類別中是否存在帶有簽名Ret(Args...) 的特定函數f(Args.. .):
std::cout << has_serialize<C, Ret(Args...)>::value << endl;
範例用法
在下面的範例中,我們定義了兩個類,X 和Y,其中Y繼承自X。類別X有一個傳回int的成員函數serialize(const std::string&)。
使用has_serialize模板,我們可以驗證X和Y都擁有serialize函數具有正確的簽名:
struct X { int serialize(const std::string&) { return 42; } }; struct Y : X {}; std::cout << has_serialize<X, int(const std::string&)>::value << endl; // 1 (true) std::cout << has_serialize<Y, int(const std::string&)>::value << endl; // 1 (true)
這演示了has_serialize 模板技巧如何有效地檢測類別是否包含給定的特定成員函數簽名。
以上是如何檢查C類別是否有特定簽名的成員函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!