【发布时间】:2016-02-26 12:50:32
【问题描述】:
请解释一下模板专业化选择的规则。我有一个例子:
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 会发生什么情况?会不会带来一些影响?
【问题讨论】:
-
我不明白为什么你会期望这里有什么不同。
S<float>中的float是第一个 类型参数T1,而不是第二个T2。但如果T2是float,则专业化。 -
@5gon12eder 推测,OP 正在尝试指定部分特化的模板参数(
T);不是一个不常见的初学者错误。 -
我最初的想法是id我指定了一个模板参数,编译器应该选择专业化,因为它更喜欢专业化而不是基础。
标签: c++ templates template-specialization