c++ - 如何使用 C++ 模板减少编译时间

我正在将我的 C++ 应用程序的一部分从使用较旧的 C 类型数组更改为模板化的 C++ 容器类。见 this question详情。虽然该解决方案运行良好,但我对模板化代码所做的每一个小改动都会导致大量的重新编译发生,从而大大减慢了构建时间。有什么方法可以将模板代码从 header 中取出并返回到 cpp 文件中,这样小的实现更改就不会导致重大的重建?

最佳答案

几种方法:

  • export keyword理论上可以提供帮助,但它的支持很差,并在 C++11 中被正式删除。
  • 显式模板实例化(参见 here 或 here)是最直接的方法,前提是您可以提前预测需要哪些实例化(并且如果您不介意维护此列表)。
  • 外部模板,已被多个编译器作为扩展支持。据我了解,extern 模板不一定能让您将模板定义移出头文件,但它们确实使编译和链接速度更快(通过减少必须实例化和链接模板代码的次数)。
  • 根据您的模板设计,您可以将其大部分复杂性转移到 .cpp 文件中。标准示例是一个类型安全的 vector 模板类,它仅包装了一个类型不安全的 void* vector ;所有复杂性都存在于 .cpp 文件中的 void* vector 中。 Scott Meyers 在 Effective C++ 中给出了更详细的示例(第 2 版中的第 42 项,“明智地使用私有(private)继承”)。

https://stackoverflow.com/questions/2827422/

相关文章:

c++ - 为什么 reinterpret_cast 不能将 int 转换为 int?

c++ - 析构函数可以是最终的吗?

c++ - vector 的 std::remove 和删除之间的区别?

c++ - 什么是 decltype 以及它是如何使用的?

c++ - 编译lua代码,存储字节码然后加载并执行

c++ - Visual Studio 没有为此文档加载任何符号

c++ - 与 win32 CRITICAL_SECTION 相比的 std::mutex 性能

c++ - 三元表达式中的逗号混淆

c++ - auto 和 decltype 的关系

c++ - "&s[0]"是否指向 std::string 中的连续字符?