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