[英]Template class specialization with template class
相關問題:
請考慮以下代碼:
template <typename T>
struct is_std_vector: std::false_type { };
template<typename ValueType>
struct is_std_vector<std::vector<ValueType>>: std::true_type { };
為什么這樣的模板類專業化語法是正確的? 以下似乎更合乎邏輯:
template <typename T>
struct is_std_vector: std::false_type { };
template<> //--- because it is is_std_vector specialization
template<typename ValueType>
struct is_std_vector<std::vector<ValueType>>: std::true_type { };
類模板部分特化語法緊密反映函數模板語法。 實際上,排序類模板部分特化的規則基於函數模板部分排序。
使用vector<T>
編寫函數的方法是:
template <class T>
void is_std_vector(vector<T> ) { ... }
所以你在vector<T>
上編寫專門化的方式是一樣的:
template <class T>
class is_std_vector<vector<T>> { ... };
匹配的專業化is_std_vector
會嘗試推斷T
的vector<T>
從某種類型的論證A
,所以它是一個很大的意義,他們正在寫相同的方式。
對於完全特化,我們使用template <>
作為占位符信號,使完全特化看起來類似於部分特化。 我不確定在這種特殊情況下額外template <>
用途是什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.