проверка наличия метода у класса
От: ProperEducation  
Дата: 10.08.08 21:37
Оценка:
Из-за неработающего поиска, прогуглил rsdn, в принципе ответ нашел здесь
Автор: Кодёнок
Дата: 27.12.05
.
За исключением того, что у меня не шаблонный метод, на MSVC 2005 работает:
template<typename T>
struct is_method_exist
{
    template<int (T::*)(int)>//сигнатура метода
    struct signature{};

    template<typename T_> static char method_signature_test(const T_&,signature<&T_::Foo> *p=0);
    template<typename T_> static double method_signature_test(const T_&,...);

    static const bool is_exist=(1==sizeof(method_signature_test(T())));//MSVC ok, однако Comeau Online Error
};

class A { public:
    int Foo(int i){return 0;} };

class B{};

bool bA=is_method_exist<A>::is_exist;//true
bool bB=is_method_exist<B>::is_exist;//false


Однако Comeau Online не компилит
"error: more than one instance of overloaded function"
Вопрос в том, чего ему надо?
//We dont need no thought control
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.