如何选择部分模板专业化?

时间:2016-02-26 12:50:32

标签: c++ templates template-specialization

请解释模板专业化选择的规则。我有一个例子:

template<typename T1, typename T2 = int>
struct S : false_type{};

template<typename T>
struct S<T, float> : true_type{};

cout << boolalpha << S<float>::value;

为什么输出为false?一般而言,专业类中的默认模板参数typename T2 = int会发生什么?它会引入一些影响吗?

1 个答案:

答案 0 :(得分:8)

选择模板专业化分为五个步骤:

  1. 获取主要模板声明。 (<T1, T2 = int> S
  2. 填写用户指定的模板参数。 (T1 <- float
  3. 仅限功能模板:扣除其他模板参数。
  4. 使用剩余模板参数的默认值。 (T2 <- int
  5. 使用部分排序算法(C ++ 14 14.5.6.2)选择最佳匹配的特化。 (<float, int><T, float>不匹配,因此请忽略专业化;只剩下可能性为主要模板)