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

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

全部回覆(2)
巴扎黑

C++的模板一般是用於泛型(也就是一份程式碼給多種型別共用),但是也可以用於非型別(Non-type template parameter),可以是整數型、字元、布林這些可以透過字面量明確判定等價的類型

你平常宣告一個型別模板參數可能是 template <typename T>,而這裡Non-type模板參數是 template <bool B>,就這點區別而已。如果要詳細說enable_if這個模板技法,關鍵不是在Non-type,也不是在partial spec,而是在於SFINAE,你學習一下這方面的內容。

Peter_Zhu

enable_if上面寫著templatebool _test>,所以自然要填true/false進去。

在使用的時候,你會發現如果一個表達式expr的結果為true,那麼enable_if::type就是存在的。所以你就可以寫這樣的程式碼:

template<typename T>
__forceinline T Copy(typename enable_if<sizeof(T)>=4, T>::type const& t)
{
    return t;
}

來測試一個型別是否不小於4個位元組。如果是原樣返回,如果不是就編譯錯誤。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板