template<bool _Test,
class _Ty = void>
struct enable_if
{ // type is undefined for assumed !_Test
};
template<class _Ty>
struct enable_if<true, _Ty>
{ // type is _Ty for _Test
typedef _Ty type;
};
代码如上,enable_if<true, _Ty>,这里应该是一个类模板的特例化吧,可是为啥是true,不应该是一个类型吗?这是什么用法?
C++的模板一般是用于泛型(也就是一份代码给多种类型共用),但是也可以用于非类型(Non-type template parameter),可以是整型、字符、布尔这些可以通过字面量明确判定等价的类型。
你平时声明一个类型模板参数可能是
template <typename T>
,而这里Non-type模板参数是template <bool B>
,就这点区别而已。如果要详细说enable_if
这个模板技法,关键不是在Non-type,也不是在partial spec,而是在于SFINAE,你学习一下这方面的内容。