首页 > 解决方案 > 使用外部模板构建时间优化

问题描述

我正在尝试使用 extern 模板优化构建时间,因为我有很多生成的标头,其中包含模板类的 typedef。

模板类

// TypeID.h

template <typename T>
class TypeID
{
public:
    TypeID(/* <some parameters> */);

    bool isNull() const;
    // ... many other methods
};

template <typename T>
TypeID<T>::TypeID(/* <some parameters> */)
{
    // impl
}

template <typename T>
bool TypeID<T>::isNull() const
{
    // impl
}

// same for the rest of the methods

生成的标头示例

// NamedID.h

#include "TypeID.h"

typedef TypeID</* some type */> NamedID;

有许多 (~2k) 标头,例如具有不同类型的 NamedID,它们包含在整个项目中。

我更改了代码生成器以在 typedef 上方添加这一行:

extern template class TypeID</* some type */>;

除了头文件之外,它现在还生成一个 cpp,其中所有 extern 模板都有一个对应的

template class TypeID</* some type */>;

由于标头的数量以及它们在项目中使用的次数,我预计编译时间会有很大差异(至少是一些明显的差异),但没有区别。

我在有和没有这种变化的情况下运行了几次构建运行,所有这些运行都需要 2h 30m +/-2m。

我执行错了吗?我期待太多了吗?

我的环境:

标签: c++templatesextern

解决方案


推荐阅读