0

我有一个编译器优化问题。

让 A、B、C 三个类和 static_update_manager 另一个类尚未实现。

static_update_manager 必须按如下方式使用:

typedef typename static_update_manager<A>::type manager_t;                

manager_t 的定义放在名为 manager.hpp 的头文件中,该头文件被许多模块使用。

在编译过程中,static_update_manager::type 被计算
并替换为

static_update_manager_lst< boost::mpl::vector<A, B, C> >                    

计算 manager_t 类型的时间很长,而且占用大量内存。问题是所有模块都在执行该演算。
但是,事实上,我们只需要一次完成这项工作。

是否有 C++ 机制来做到这一点?

一个想法可能是使用 gcc 将文件 manager.hpp 转换为另一个文件
manager_compiled.hpp,如下所示:

typedef typename static_update_manager_lst< boost::mpl::vector<A, B, C> > manager_t;

并在所有模块中使用 manager_compiled.hpp 而不是 manager.hpp。

但我不知道如何正确地做到这一点。

我有一个可怕的解决方案:
想法是制作一个脚本,编译一个包含 manager_t 类型的错误的源代码,然后用 grep 提取计算的类型
以构造标头 manager_compiled.hpp。

4

0 回答 0