我很难理解正式订购规则是如何工作的,正如D. Vandevoorde和N. M. Josuttis所着的“C++模板,完整指南”一书第12章所述。在这本书的第188页,作者给出用来决定哪两个可行函数模板是更加专业化的以下情形:C++模板正式订购规则
从我们通过如前所述更换模板参数合成参数类型的两个列表这两个模板:
(A1)
和(A2*)
(其中A1
和A2
是独特的组成类型)。很明显,通过用A2*
代替T
,第二个参数类型列表中的第一个模板被扣除。但是,无法使第二个模板的T*
与第一个列表中的非指针类型A1
匹配。因此,我们正式得出结论,第二个模板比第一个模板更专业。
我想了解一些例子。
编辑
我相信,在以上报价提到两个函数模板
template<typename T>
int f(T)
{
return 1;
}
template<typename T>
int f(T*)
{
return 2;
}
我不明白为什么'T'是第一个非指针类型。为什么'T'不能'int *'? – 2012-04-03 12:02:25
@SethCarnegie会做。 – Olumide 2012-04-03 12:10:55
'T'可能是'int *'的第一个,但第二个会被选中,因为'T = int',它更专用。基本上,第一个只能选择非指针“T”。 – 2012-04-03 12:34:03