2

Using a trick (described by Olivier Langlois), I can determine whether a class has a type defined:

template<typename T> struct hasType
{
    template<typename C> static char test( typename C::Type );
    template<typename C> static char* test(...);
    enum{ Value= sizeof(test<T>(0))==1 };
};

I can also determine whether a class has a variable:

template<typename T> struct hasType
{
    template<typename C> static char test( decltype(C::var) );
    template<typename C> static char* test(...);
    enum{ Value= sizeof(test<T>(0))==1 };
};

However, neither decltype(c::func) nur decltype(c::func()) (which depends on the parameters) works for member functions. Is there a way to do this or will I have to create a functor in every class and detect it with typename C::functor?

Edit: You're both right, but since I'll also have to test for a type I'll use decltype(&C::func) (which should obviously be a pointer).

tstenner
  • 10,080
  • 10
  • 57
  • 92

0 Answers0