iam*_*ind 10 c++ templates metaprogramming
template<typename> struct void_ { typedef void type; };
template<typename T, typename = void> // Line 1
struct is_class { static bool const value = false; };
template<typename T>
struct is_class<T, typename void_<int T::*>::type> { // Line 2
static bool const value = true;
};
Run Code Online (Sandbox Code Playgroud)
此构造查找给定类型是否为类.令我困惑的是编写这个小元程序的新语法.任何人都可以详细解释:
<int
T::*>作为template参数的含义是什么?Xeo*_*Xeo 10
第1行:如果测试成功,则选择下面的部分特化.
第2行:int T::*仅T在类类型时有效,因为它表示成员指针.
这样,如果它是有效的,void_<T>::type产量void,具有这种部分特选择用于与实例化value的true.如果T是类类型的不是,那么这部分专门化出来的图片得益于SFINAE的,其默认值为回用的通用模板value的false.
每当你看到a T::SOMETHING,if SOMETHING不存在时,无论是类型,数据成员还是简单的指针定义,你都会得到SFINAE.