簡體   English   中英

模板類的模板類專業化

[英]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會嘗試推斷Tvector<T>從某種類型的論證A ,所以它是一個很大的意義,他們正在寫相同的方式。

對於完全特化,我們使用template <>作為占位符信號,使完全特化看起來類似於部分特化。 我不確定在這種特殊情況下額外template <>用途是什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM