在C 中,使用提供的方法檢查成員函數運算子== 是否存在非常簡單成員函數。然而,確定非成員運算子==的存在可能更具挑戰性。
C 03 方法:
可以採用以下技術來檢查任何運算符的存在性:
namespace CHECK { class No { bool b[2]; }; template<typename T, typename Arg> No operator== (const T&, const Arg&); bool Check (...); No& Check (const No&); template <typename T, typename Arg = T> struct EqualExists { enum { value = (sizeof(Check(*(T*)(0) == *(Arg*)(0))) != sizeof(No)) }; }; }
要使用此方法,只使用此方法需呼叫EqualExists範本:
CHECK::EqualExists<A>::value;
如果EqualExists值非零,則非成員運算子 == 存在。
C 11 方法:
C 11 提供了一種使用decltype 和std::declval:
namespace CHECK { struct No {}; template<typename T, typename Arg> No operator== (const T&, const Arg&); template<typename T, typename Arg = T> struct EqualExists { enum { value = !std::is_same<decltype(std::declval<T>() < std::declval<Arg>()), No>::value }; }; }
檢查非成員運算符==,請使用:
CHECK::EqualExists<A>::value;
以上是如何檢查 C 中是否存在非成員 `operator==` ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!