在c ++/gcc中优化模板编译时间

que*_*en3 17 c++ linux gcc templates g++

在一个大型项目中,我们有很多类(数千个),并且对于每个类,使用typedef定义了一个特殊的智能指针类型.此智能指针类型是模板类.当我用"gcc -Q"编译时,我发现花了很多时间为每个类编译这些智能指针.这就是我看到smartptr<class1>::methods, then smartptr<class2>::methods... smartptr<class2000>::methods在gcc处理它们时在屏幕上滚动.

有加速这个过程的技巧吗?从smartptr的角度来看,这些类都是相同的,没有enable_if技巧等.

我现在正在尝试的事情:

  • 也许用很少的常用方法创建一个非模板基类
  • 使用extern模板类来减少链接符号(和实例化时间?还不确定)

但以上所有都不是一个完整的解决方案.我想知道是否有另一种方法可以优化编译时间,这是一个让gcc知道的技巧,例如,一旦它在看到其他特化时反复应用相同的知识就解析了smartptr,因为生成代码是相同的.

是的,我知道这是不是一样,当然......但是,这只是一个疯狂的想法.

或者也许还有其他我不知道的技巧,可以加快编译速度.(只是为了说明我正在谈论的内容,我们可以通过消除其静态成员数据实例来优化另一个模板,这大大减少了编译时间.这根本不明显.)

use*_*604 0

预编译头

如果您的代码更改不在标头中,这实际上可能有助于减少编译时间。 (来源)