84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
欢迎选择我的课程,让我们一起见证您的进步~~
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个字节。如果是原样返回,如果不是就编译错误。