我有一个编译器优化问题。
让 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。