我正在将我的 C++ 应用程序的一部分从使用旧的 C 类型数组更改为模板化的 C++ 容器类。看这个问题 https://stackoverflow.com/questions/2472944/good-c-array-class-for-dealing-with-large-arrays-of-data-in-a-fast-and-memory-e了解详情。虽然该解决方案运行良好,但我对模板化代码所做的每一个微小更改都会导致发生大量重新编译,从而大大减慢构建时间。有没有什么方法可以将模板代码从标头中取出并返回到 cpp 文件中,以便较小的实现更改不会导致重大重建?
几种做法:
- The 导出关键字 http://www.parashift.com/c++-faq-lite/separate-template-fn-defn-from-decl-export-keyword.html理论上可以提供帮助,但它的支持很差,并在 C++11 中被正式删除。
- 显式模板实例化(参见here https://isocpp.org/wiki/faq/templates#separate-template-fn-defn-from-decl or here https://msdn.microsoft.com/en-us/library/by56e477%28v=vs.140%29.aspx)是最直接的方法,如果您可以提前预测您将需要哪些实例化(并且如果您不介意维护此列表)。
- 外部模板,已经被多个编译器支持作为扩展。据我了解,外部模板不一定让您将模板定义移出头文件,但它们确实使编译和链接速度更快(通过减少模板代码必须实例化和链接的次数)。
- 根据您的模板设计,您也许能够将其大部分复杂性转移到 .cpp 文件中。标准示例是一个类型安全的向量模板类,它仅包装一个类型不安全的向量
void*
;所有的复杂性都集中在void*
驻留在 .cpp 文件中的向量。 Scott Meyers 在 Effective C++ 中给出了更详细的示例(第 42 项,“明智地使用私有继承”,第 2 版)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)