Sto provando a verificare se una classe ha un metodo operator==
. Ho trovato una soluzione con SFINAE here e funziona perfettamente con la classe che faccio.int ha un operatore ==
Ecco come si presenta:
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) };
};
Ma, quando provo:
std::cout << comparable<int>::value << std::endl;
Poi restituisce false, mentre io mi aspettavo di restituire true. Perchè è questo ?
Circa la questione si aveva in là prima della modifica (che cosa significano i tre punti), guarda questa domanda: http://stackoverflow.com/questions/1657883/variable-number-of-arguments-in-c – Anedar
Cosa succede se 'classe C {...}; bool operator == (const C & a, const C & b) {...} '? Il tuo codice dirà che non c'è operatore ==, perché non ce n'è uno nella classe. – immibis