Возможный дубликат:
Можно ли написать шаблон C++ для проверки существования функции?
Это очень похоже на мой предыдущий вопрос . Я хочу проверить, содержит ли аргумент шаблона функцию-член или нет.
Я попробовал этот код, аналогичный коду в принятом ответе на мой предыдущий вопрос.
struct A
{
int member_func();
};
struct B
{
};
template<typename T>
struct has_member_func
{
template<typename C> static char func(???); //what should I put in place of '???'
template<typename C> static int func(...);
enum{val = sizeof(func<T>(0)) == 1};
};
int main()
{
std::cout<< has_member_func<B>::val; //should output 0
std::cout<< has_member_func<A>::val; //should output 1
}
Но я понятия не имею, что я должен поставить вместо ???
, чтобы это заработало. Я новичок в концепции SFINAE.
TypeHasToString
может не скомпилироваться с типами, не относящимися к классу (он не будет использовать SFINAE, когда ошибка возникает внутриToString<>
), и произойдет сбой, еслиsizeof(char) == sizeof(long)
. Я изменю свой ответ, чтобы использовать typedefs, чтобы он был более читабельным. - person Johannes Schaub - litb   schedule 05.12.2010