コンパイラの最適化の問題があります。
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 を構築するという考えです。