c++ - STL模板部分特例化。
天蓬老师
天蓬老师 2017-04-17 13:03:03
0
2
696
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全員に返信(2)
巴扎黑

C++的模板一般是用于泛型(也就是一份代码给多种类型共用),但是也可以用于非类型(Non-type template parameter),可以是整型、字符、布尔这些可以通过字面量明确判定等价的类型

你平时声明一个类型模板参数可能是 template <typename T>,而这里Non-type模板参数是 template <bool B>,就这点区别而已。如果要详细说enable_if这个模板技法,关键不是在Non-type,也不是在partial spec,而是在于SFINAE,你学习一下这方面的内容。

いいねを押す +0
Peter_Zhu

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个字节。如果是原样返回,如果不是就编译错误。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート