我一直在努力理解模板特化。为什么这会产生错误(实例化后“T foo(T, T) [with T = int]”的特化
)
template <class T> T foo(T a, T b);
int main()
{
int x=34, y=54;
cout<<foo(x, y);
}
template <class T> T foo(T a, T b)
{
return a+b;
}
template <> int foo<int>(int a, int b)
{
cout<<"int specialization";
}
最佳答案
标准要求在实例化时必须知道所有模板定义,并且每个翻译单元都看到相同的定义。否则你的程序是错误的(事实上不需要诊断)。
(所以要解决这个问题,只需将所有模板定义放在程序的顶部即可。)
请记住,模板函数不是函数,只是模板。将它们视为代码生成工具。
关于c++ - C++ 中的模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8085286/