クラスにメソッドoperator==
があるかどうかを確認しようとしています。私はSFINAE hereで解決策を見つけました。それは私が作るクラスでうまくいきます。intに演算子がありますか?
それは次のようになります。私がしようとすると、
template <typename T>
class comparable
{
typedef char one;
typedef long two;
template <typename C> static one test(typeof(&C::operator==)) ;
template <typename C> static two test(...);
public:
enum { value = sizeof(test<T>(0)) == sizeof(char) };
};
しかし:
std::cout << comparable<int>::value << std::endl;
私はそれがtrueを返すことを期待している間、それはfalseを返します。どうしてこれなの ?
あなたが編集する前にそこに持っていた疑問(3つのドットが何を意味するか)については、見この質問:http://stackoverflow.com/questions/1657883/variable-number-of-arguments-in-c – Anedar
'class C {...}; bool演算子==(const C&a、const C&b){...} '?あなたのコードでは、クラス内にオペレータがないので、演算子==はないと言います。 – immibis