请向我解释模板专业化选择的规则。我举一个例子:如何选择部分模板专业化?
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'是* first *类型参数'T1',而不是第二个'T2'。但专业化是为了如果'T2'是'浮动'。 –
5gon12eder
@ 5gon12eder推测,OP试图指定部分特化('T')的模板参数;不是一个不常见的初学者错误。 –
我最初的想法是,我指定一个模板参数,编译器应该选择专业化,因为它喜欢专业化基地。 – nikitablack