巴扎黑2017-04-17 13:05:03
C++的模板一般是用于泛型(也就是一份代码给多种类型共用),但是也可以用于非类型(Non-type template parameter),可以是整型、字符、布尔这些可以通过字面量明确判定等价的类型。
你平时声明一个类型模板参数可能是 template <typename T>
,而这里Non-type模板参数是 template <bool B>
,就这点区别而已。如果要详细说enable_if
这个模板技法,关键不是在Non-type,也不是在partial spec,而是在于SFINAE,你学习一下这方面的内容。
天蓬老师2017-04-17 13:05:03
enable_if上面写着template<bool _test>,所以自然要填true/false进去。
在使用的时候,你会发现如果一个表达式expr的结果为true,那么enable_if<expr>::type就是存在的。所以你就可以写这样的代码:
template<typename T>
__forceinline T Copy(typename enable_if<sizeof(T)>=4, T>::type const& t)
{
return t;
}
来测试一个类型是否不小于4个字节。如果是原样返回,如果不是就编译错误。