84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
欢迎选择我的课程,让我们一起见证您的进步~~
C++的模板一般是用于泛型(也就是一份代码给多种类型共用),但是也可以用于非类型(Non-type template parameter),可以是整型、字符、布尔这些可以通过字面量明确判定等价的类型。
你平时声明一个类型模板参数可能是 template <typename T>,而这里Non-type模板参数是 template <bool B>,就这点区别而已。如果要详细说enable_if这个模板技法,关键不是在Non-type,也不是在partial spec,而是在于SFINAE,你学习一下这方面的内容。
template <typename T>
template <bool B>
enable_if
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个字节。如果是原样返回,如果不是就编译错误。
C++的模板一般是用于泛型(也就是一份代码给多种类型共用),但是也可以用于非类型(Non-type template parameter),可以是整型、字符、布尔这些可以通过字面量明确判定等价的类型。
你平时声明一个类型模板参数可能是
template <typename T>
,而这里Non-type模板参数是template <bool B>
,就这点区别而已。如果要详细说enable_if
这个模板技法,关键不是在Non-type,也不是在partial spec,而是在于SFINAE,你学习一下这方面的内容。enable_if上面写着template<bool _test>,所以自然要填true/false进去。
在使用的时候,你会发现如果一个表达式expr的结果为true,那么enable_if<expr>::type就是存在的。所以你就可以写这样的代码:
来测试一个类型是否不小于4个字节。如果是原样返回,如果不是就编译错误。