我在Alexandrescu的书中发现了这种类型特征,我不知道如何理解这个规范
template <typename T>
class TypeTraits
{
private:
template <class U> struct PToMTraits
{
enum { result = false };
};
template <class U, class V>
struct PToMTraits<U V::*>
{
enum { result = true };
};
public:
enum { isMemberPointer = PToMTraits<T>::result };
...
};
答案 0 :(得分:3)
这是 P ointer 到 M 余烬检查器,因此 PtoM 。
它检查传入的类型是否是指向数据成员的类型(或不是)。它通过提供result
为false
的主模板以及与U V::*
匹配的任何类型的部分特化(即指向任何类{{1}的数据成员的指针)来实现此目的。任何类型U
),其V
为result
。