模板特化会导致未定义的引用错误

ore*_*uro 3 c++ templates template-specialization

我尝试了像bellow一样的模板专业化.

#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);
}
Run Code Online (Sandbox Code Playgroud)

但是,这给了我一个compilatoin错误:

In function `main':
test.cpp:(.text+0x9): undefined reference to `double something<double, double>(double)'
Run Code Online (Sandbox Code Playgroud)

你能告诉我怎么解决吗?

son*_*yao 5

这不是模板专业化,而是功能模板重载.

第一次重载有两个模板参数,第二个只有一个; 当您使用两个指定的模板参数调用它时something<double, double>(0.0);,将在重载决策中选择第一个; 但它没有定义然后导致链接错误.


BTW:功能模板只能是完全专业化的,不能局部专业化.在大多数情况下,函数模板重载可以很好地完成工作.