Pimplは多くのC++コードの定型文のソースです。マクロ、テンプレート、多少の外部ツールの組み合わせで解決できるもののように見えますが、最も簡単な方法は何か分かりません。 I've seen templatesこれは、持ち運びには役立ちますが、それほど多くはありません。巻き戻そうとしているクラスのすべてのメソッドの転送関数を作成する必要があります。簡単な方法がありますか?C++クラスの自動化を自動化する - 簡単な方法はありますか?
私はmakeプロセスの一部として使用されるツールを想像しています。パブリックヘッダがpimpl'dクラスであるようにしたいので、ラップしたいクラス(pimplで実装されていない)をリストしたpimpl.inなどの入力ファイルを用意し、そのファイルを調べ、 pimplクラスが生成され、 'make install'中にヘッダー(元のクラスのヘッダーではない)だけがインストールされます。問題は、完全な吹き飛ばされたC++パーサーなしではこれを行う方法がないことです。コンパイラベンダーでさえ得られないものもあります。多分、クラスは外部ツールの仕事をより簡単にするような形で書くことができるかもしれませんが、私はあらゆる種類のコーナーケース(例えば、テンプレート化されたクラスやテンプレート化されたメンバ関数)を失うことになるでしょう。
アイデア?他の誰かがすでにこの問題の解決策を持っていますか?
class ClassA {
virtual void foo() = 0;
static ClassA *create();
};
// in ClassA.cpp
class ImplA : public ClassA {
/* ... */
};
ClassA *ClassA::create() {
return new ImplA();
}
しかしこれはvtableの関数ポインタをフェッチからオーバーヘッドを追加しない:
レイジーC++は似た何かをする – Amnon