模板 class 专业化模板 class
Template class specialization with template class
相关问题:
- 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 { };
为什么这样的模板 class 专业化语法是正确的?
以下似乎更符合逻辑:
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 { };
Class 模板偏特化语法与函数模板语法非常相似。实际上,class 模板偏特化的排序规则是基于函数模板偏序的。
编写一个带 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
的特化会尝试从某些类型参数 A
中推导出 vector<T>
中的 T
,因此它们是写的一样。
对于完全特化,我们使用 template <>
作为占位符信号,使完全特化看起来类似于部分特化。我不确定在这种特殊情况下额外的 template <>
有什么用。
相关问题:
- 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 { };
为什么这样的模板 class 专业化语法是正确的? 以下似乎更符合逻辑:
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 { };
Class 模板偏特化语法与函数模板语法非常相似。实际上,class 模板偏特化的排序规则是基于函数模板偏序的。
编写一个带 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
的特化会尝试从某些类型参数 A
中推导出 vector<T>
中的 T
,因此它们是写的一样。
对于完全特化,我们使用 template <>
作为占位符信号,使完全特化看起来类似于部分特化。我不确定在这种特殊情况下额外的 template <>
有什么用。