【发布时间】:2014-05-05 20:43:06
【问题描述】:
template<typename TA, typename TB>
void foo (TA a, TB b); // #1
template<typename T>
void foo (T a, T b); // #2
int a, b;
foo(a, b);
在这种情况下,调用 foo #2。为什么?
【问题讨论】:
-
@πάνταῥεῖ:我不确定这与这个问题有什么关系。
-
@OliCharlesworth 我也不是 ;) ...认为 dyp 的评论更符合我想要表达的意思。
-
在这种情况下,两个模板都会生成一个函数签名
void foo(int, int),因此它们是根据部分排序又名哪个更专业 i>. -
一个非常的详细解释可以在这里找到stackoverflow.com/q/17005985/420683
-
@dyp:谢谢。部分排序似乎是关键。我认为重要的是要注意,在偏序中,一个函数模板可以比另一个函数模板更特化,但这并不意味着或要求一个是另一个的特化。当我第一次寻找答案时,这个术语让我有些困惑。