c++ - 使用外部模板构建时间优化
问题描述
我正在尝试使用 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。
我执行错了吗?我期待太多了吗?
我的环境:
- RHEL 7.7
- 海湾合作委员会 8.3.1
- CMake + ninja,没有 ccache,没有冰淇淋/distcc
解决方案
推荐阅读
- python - FitFailedWarning in Simple Linear Regression scoring with cross_val_score
- json - 有没有办法可以检索存储在 redshift 列中的 JSON 对象的元素作为单独的行?
- jquery - 无法刷新单选按钮 Bootstrap 3
- ansible - 如何使用随机 6 位密码创建用户记录并使用 Ansible playbook 将密码设置保存在文件中
- c# - 为什么我的 C# 端点不理解我的 Angular Reactive 表单数据?
- typescript - 有没有办法在泛型参数中使用条件“类型保护”类型?
- sqlalchemy - Python Mock Patch 两个相似的函数
- javascript - 摆脱 ReactJS 的重复代码
- c# - 如何将值设置为只读 Httpcontex.request.HttpMethod?
- r - 将 eval(parse()) 应用于 r 中列的所有行