c++ - C++ 中的模板特化

标签 c++ templates instantiation specialization

我一直在努力理解模板特化。为什么这会产生错误(实例化后“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/

相关文章:

c++ - 如何在另一个程序中使用在一个程序中声明的变量?

c++ - 如何创建类模板数组?

c++ - 检查模板参数是否等于另一个模板参数的基类

javascript - 我们如何在 lift 中使用 net.liftweb.http.js.JsCmds.Script 对象?

c++ - 如何将类的某些 typedef 传递给模板

java - 如果没有写构造函数,newInstance()如何工作?

c++ - 是否存在应该避免使用 constexpr 的情况,即使它可以使用?

c++ - gsl::抑制整个包含语句

c++ - qt根据布局的宽度设置小部件宽度

objective-c - 动态实例化对象 Objective-C