c++ - 为什么不能在函数中声明模板?

标签 c++ templates

阅读 C++ Templates: The Complete Guide它说

Note that templates cannot be declared in a function

它不对本书或外部资源中的任何其他章节进行解释和/或交叉引用。

谁能帮忙解释一下。可能它在本书后面有解释,但还没有。如果早点解释,我一定错过了。

例子:

int main()
{
  class DummyClass  //  This compiles ok
  {
    int object;
  };

  template <typename T> //  compile error "expected primary-expression before "template""
  class DummyTemplate
  {
    T object;
  };

  return 0;
}

我也不明白 gcc 的错误信息。错误消息说:

expected primary-expression before "template"

最佳答案

这个问题可能与模板实现的历史方式有关:早期的实现技术(有些至今仍在使用)要求模板中的所有符号都具有外部链接。 (实例化是通过在单独的文件中生成等效代码来完成的。)在函数内部定义的名称永远不会有链接,并且不能在定义它们的范围之外引用。

关于c++ - 为什么不能在函数中声明模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6032391/

相关文章:

c++ - 我的神经网络学习 sin x 而不是 cos x

python - 如何将 opencv Mat 类型传递给 Python 并取回数组?

C++、指针、引用、从一个函数传递到另一个函数、std::vector、std::string

c++ - 向标准模板的特化添加新方法(std::vector、std::list...)

c++ - C++ 特征表达式中的显式类型声明与 auto

c++ - 在 unsigned Char 的 MSB 和 LSB 上写入

c++ - 可变参数模板的未声明标识符

c++ - 关于模板代码组织 : where to put code that a template uses

c++ - C++中的回调模板

templates - 模板需要比项目包含的脚本版本更新的脚本版本