首頁 > 後端開發 > C++ > 我的班級有這個會員功能嗎?

我的班級有這個會員功能嗎?

DDD
發布: 2024-12-21 08:20:11
原創
417 人瀏覽過

Does My Class Have This Member Function?

檢查給定簽章的類別成員函數

考慮驗證一個類別是否擁有預定簽章的特定成員函數的挑戰簽章。雖然與 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&amp;) { return 42; } 
};

std::cout << has_serialize<Y, int(const std::string&amp;)>::value; // prints 1
登入後複製

以上是我的班級有這個會員功能嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板