模板函数匹配规则

模板函数匹配是一般规则是:

1. 先匹配模板及其重载(模板本身的匹配)

2. 上面一步没匹配到的话,再继续匹配特例化模板(模板实例化的匹配)

可以看看下面的代码:

// Example program
#include <iostream>
#include <string>

using namespace std;

template<class T>   /// 1
void foo(T t) {
    cout << 0;
}

template<>    ///2
void foo<int*>(int* t) {
    cout << 20;
}

template<class T>   ///3
void foo (T* t) {
    cout << 30;
}

int main()
{
  int i = 20;
  foo(&i);
 
}

输出结果:

30

可见跳过了2,直接匹配了3的模板,再次印证了那句话,先把模板本身都匹配一遍,

然后再去考虑特理化的版本。


版权声明:本文为Poo_Chai原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。