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 값이 0이 아닌 경우 비멤버 연산자==가 존재합니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!