在 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中文网其他相关文章!