0

コンパイラの最適化の問題があります。

A、B、C の 3 つのクラスと、まだ実装されていない別のクラス 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.hpp の代わりにすべてのモジュールで manager_compiled.hpp を使用します。

しかし、それを正しく行う方法がわかりません。

私には恐ろしい解決策があります:
スクリプトを作成し、manager_t の型を含むエラーを含むソース コードをコンパイルし、計算された型を grep で
抽出して、ヘッダー manager_compiled.hpp を構築するという考えです。

4

0 に答える 0