模板函数匹配是一般规则是:
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版权协议,转载请附上原文出处链接和本声明。