c++ - 分布在多个文件中的模板

标签 c++ templates

在跨多个文件声明模板时,C++ 似乎很不爽。更具体地说,当使用模板化类时,链接器期望该类的所有方法定义都在一个编译器目标文件中。当您考虑到 header 、其他声明、继承等时,事情变得非常困惑。

对于跨多个文件组织或重新分配模板化成员定义是否有任何一般性建议或解决方法?

最佳答案

Are there any general advice or workarounds for organizing or redistributing templated member definitions across multiple files?

是的;不要。

C++ 规范允许编译器能够在实例化点“看到”整个模板(声明 定义),并且(由于任何实现的复杂性)大多数编译器保留这个要求。结果是任何模板头的#inclusion 还必须#include 实例化模板所需的任何和所有源。

处理此问题的最简单方法是将所有内容转储到标题中,尽可能内联,必要时外联。

如果你真的认为这是 Not Acceptable 冒犯,一个常见的选择是将模板拆分为通常的 header /实现对,然后在 header 末尾#include 实现文件。

C++ 的“导出”功能可能会也可能不会提供另一种解决方法。该功能的支持和定义不佳;虽然它原则上应该允许对模板进行某种单独的编译,但并不一定排除编译器能够看到整个模板主体的需求。

关于c++ - 分布在多个文件中的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36039/

相关文章:

c++ - 基于范围的循环 : Auto changes meaning in C++11

c++ - 具有捆绑属性的 BGL Dijkstra 最短路径

c++ - _sleep() 函数不工作

c++ - 为什么在使用我的 auto_ptr 样式类访问结构成员时得到 'unidentified identifier'?

c++ - 在与 initializer_list 不兼容的 C++ 模板复制赋值运算符中?

c++ - 用模板实现替换预处理器 #ifdef block

c++ - boost 二进制文件 - 减少大小

c++ - 可以在没有模板参数的情况下使用模板类的静态类函数吗?

c++ - 在 C++ 中传递专门的函数指针

c++ - 从 map 容器中查找第一个大于用户指定值的值