我已经阅读了boost :: is_class的实现。显然我正在使用SFINAE。
我自己编写了另一个is_class
。
我注意到boost的源代码中有一个void(A::*)(void)
。
这究竟是什么意思。
这是我的代码:
#include<iostream>
template<typename T>
struct is_class
{
typedef const char yes_type[1];
typedef const char no_type[2];
template<typename A>
static yes_type& test(void(A::*)(void));
//What's A::*
template<typename A>
static no_type& test(...);
const static bool value = sizeof(test<T>(0)) == sizeof(yes_type);
};
struct A{};
int main()
{
std::cout<<is_class<A>::value<<std::endl;
return 0;
}