巴扎黑2017-04-17 13:05:03
C++的模板一般是用於泛型(也就是一份程式碼給多種型別共用),但是也可以用於非型別(Non-type template parameter),可以是整數型、字元、布林這些可以透過字面量明確判定等價的類型。
你平常宣告一個型別模板參數可能是 template <typename T>
,而這裡Non-type模板參數是 template <bool B>
,就這點區別而已。如果要詳細說enable_if
這個模板技法,關鍵不是在Non-type,也不是在partial spec,而是在於SFINAE,你學習一下這方面的內容。
天蓬老师2017-04-17 13:05:03
enable_if上面寫著template<bool _test>,所以自然要填true/false進去。
在使用的時候,你會發現如果一個表達式expr的結果為true,那麼enable_if
template<typename T>
__forceinline T Copy(typename enable_if<sizeof(T)>=4, T>::type const& t)
{
return t;
}
來測試一個型別是否不小於4個位元組。如果是原樣返回,如果不是就編譯錯誤。