7
関連した質問:テンプレートクラスの特殊
- c++ nested template specialization with template class
- template class specialization with template class parameter
は、次のコードを考えてみましょう:
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 { };
第2のものはまったく論理的ではありません。 'template <> 'は、あなたが一種の' T'だけを専門にしていることを意味します。あなたがやっていることは、部分的な特殊化です(Tの無限サブセット、すなわち 'std :: vector 'の形式を満たすものだけを指定しています) –