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