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