《C++ template》书上的一个例子,百思不得其解
下面这个模板是《C++ template》一书 15.2.2 节的一个例子,用来判断一个给定的类型是不是一个类(class 或者 struct)
namespace book_cpp_template{
template<typename T>
class IsClassType {
private:
typedef char One;
typedef struct { char a[2]; } Two;
template<typename C> static One test(int C::*);
template<typename C> static Two test(...);
public:
enum { Yes = sizeof(IsClassType<T>::test<T>(0)) == 1 };
enum { No = !Yes };
};
} // namespace book_cpp_template
struct test
{
int a;
};
int main()
{
int test::*p = &test::a;
test x;
x.a = 19;
printf( "%d\n" , x.*p );
}