Próbuję sprawdzić, czy klasa ma metodę operator==
. Znalazłem rozwiązanie z SFINAE here i działa dobrze z klasą, którą wykonuję.ma int mieć operatora ==
Wygląda to tak:
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) };
};
Ale gdy próbuję:
std::cout << comparable<int>::value << std::endl;
wówczas zwraca fałsz, a ja spodziewałem się wrócić prawdziwe. Dlaczego to ?
o pytaniu trzeba było tam przed edytować (co trzy kropki na myśli), spojrzeć na to pytanie: http://stackoverflow.com/questions/1657883/variable-number-of-arguments-in-c – Anedar
Co jeśli 'class C {...}; operator bool == (const C & a, const C & b) {...} '? Twój kod powie, że nie ma operatora ==, ponieważ nie ma go w klasie. – immibis