Как проверить наличие метода класса

 
0
 
C++
ava
Ivan. | 09.12.2016, 13:55
Здравствуйте, помогите решить задачу:
Нужно проверить есть ли у класса T определенный метод
что-то вроде этого:

struct A {
    template<typename T>
    constexpr A(const T* v):
        adr(v),
        hasMethod(has_method<T, method>::value)
    {}
private:
    const void* adr;
    bool hasMethod;
};

Перекопал уже пол boost-а, если скажу что весь перекопал - не поверите)))
Kommentare (1)
ava
borisbn | 23.12.2016, 12:50 #
Подсмотрел тут.
#include <iostream>

#define ADD_HAS_METHOD( METHOD ) \
template< typename T > \
struct has_method_##METHOD \
{ \
    template< typename U, decltype( & U::METHOD ) > struct SFINAE {}; \
    template< typename U > static char test( SFINAE< U, & U::METHOD > * ); \
    template< typename U > static int test( ... ); \
    static const bool value = sizeof( test< T >( nullptr ) ) == sizeof( char ); \
};


struct A { void foo(); };
struct B { void bar(); };

ADD_HAS_METHOD( foo )

using namespace std;
int main() {
    cout << has_method_foo< A >::value << endl;
    cout << has_method_foo< B >::value << endl;
}
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
ava  borisbn   Ivan.
advanced
Absenden