template<class T>
struct is_class_or_union
{
struct twochar { char _[2]; };
template <class U>
static char is_class_or_union_tester(void(U::*)(void));
template <class U>
static twochar is_class_or_union_tester(...);
static const bool value = sizeof(is_class_or_union_tester<T>(0)) == sizeof(char);
};
上面的代码meta_utils.hpp
来自 boost 库。
is_class_or_union_tester
似乎是一个static
函数返回char
并获取指向成员函数的指针(返回 void 并且不接受任何内容)。没有函数体,它似乎没有在其他任何地方定义。我不明白它是如何工作的,最重要的是,我不明白这个功能的目的。- 我不明白以下代码的概念:
运算符适用于什么
static const bool value = sizeof(is_class_or_union_tester<T>(0)) == sizeof(char);
?sizeof
他们想在这里找到什么?