C では、メンバー関数 Operator== の存在の確認は、提供されているメソッドを使用することで簡単に行えます。メンバー関数。ただし、非メンバー演算子 == の存在を判断するのはさらに難しいことが判明する可能性があります。
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 中国語 Web サイトの他の関連記事を参照してください。