我尝试了以下波纹管专用模板。
#include<iostream>
using namespace std;
template<class T1, class T2>
T1 something(T2 a);
template<class T2>
double something(T2 a){
double b;
return b;
}
int main(){
something<double, double>(0.0);
}
但是,这给了我一个编译错误:
In function `main':
test.cpp:(.text+0x9): undefined reference to `double something<double, double>(double)'
您能告诉我如何解决吗?
答案 0 :(得分:5)
这不是模板专门化,而是function template overloading。
第一个重载有两个模板参数,第二个重载只有一个;当您使用两个指定的模板参数(例如something<double, double>(0.0);
)调用它时,将以重载分辨率选择第一个;但未定义则会导致链接错误。
BTW:功能模板只能是full specialized,不能是partial specialized。在大多数情况下,function template overloading会很好地完成工作。