当重载方法将模板类作为参数时会发生什么

时间:2014-11-11 05:22:03

标签: c++ templates overloading

C ++允许我们使用模板编写通用函数。它还具有功能重载的功能。

我写了以下程序:

#include <iostream>

using namespace std;
template <typename T>
void test(T a)
{
    cout<<"using template";    
}
void test(int a)
{
    cout<<"using int";
}
int main()
{

   test(10);
   return 0;
}

它的出局是:

using int

我想知道选择特定方法的基础是什么?

2 个答案:

答案 0 :(得分:1)

非模板函数是比函数模板更好的匹配。

参考(C ++标准草案N3337):

  

13.3.3最佳可行功能

     

...

     

鉴于这些定义,如果对于所有参数i,可行函数F1被定义为比另一个可行函数F2更好的函数,ICSi(F1)不是比ICSi(F2)更差的转换序列,然后

     

...

     

- F1是非模板函数,F2是函数模板特化,或者,如果不是,

     

- F1和F2是功能模板专精,F1的功能模板更专业   根据14.5.6.2中描述的偏序规则,比F2的模板。

答案 1 :(得分:0)

其明显的行为,实际的param与正式的匹配。就模板而言,编译器不知道T是什么类型,也调用模板函数有不同的语法。