実行時に拡張機能を動的にロードするアプリケーションを作成しようとしています。 Boost Preprocessorライブラリを使用して、名前のリストが与えられ、それぞれの名前のクラスを宣言し(そして、それらのすべてをいくつかのAbstractPluginクラスのサブクラスにする)、そのクラスを含むBoost MPLシーケンスを宣言するプリプロセッサ関数を書きました。それから、そのMPLシーケンス内のどのタイプにもキャストできる場合、AbstractPluginへのポインタを試すクラスを作成しました。 ここでの問題は、私のプリプロセッサ関数が、作成してロードするすべての拡張機能の完全なリストを必要としていることです。各拡張機能を別々のファイルに登録できるいくつかの方法がありますか?C++クラスを登録して、後で関数が登録されたすべてのクラスを反復処理できるようにする
更新:
私は信じて、状況の私の説明はあまりにも漠然としたので、私はそれをより具体的にすることにしました。
拡張タイプのコレクションを定義したいと思います。各拡張タイプには、任意の数の拡張が存在する可能性があります。実行時に、プログラムは外部ライブラリをロードし、エントリポイント関数を解決し、それを呼び出し、結果としてポインタを取得します。次に、登録されたすべてのエクステンションタイプにポインタをキャストしようとします(dynamic_cast
を使用しているため、エクステンションタイプのクラスはすべて、多態ベースクラスから継承されます)。ある拡張タイプへのキャストが成功すると、その拡張タイプの特殊ハンドラの呼び出しでキャストされたポインタが使用されます。
コンパイル時に拡張タイプの数が分かります(ただし、拡張の数は無限です)。私のaproachを使用すると、loaderクラスはこの知識を使用して、各拡張タイプのハンドラが存在するかどうかをチェックします(そうでなければ、プログラムはコンパイルされません)。また、私のaproachは、エクステンション型のクラスを強制的にロードしないので、ローダーを変更するのは簡単です。しかし、各エクステンションタイプが登録されていると便利です。
ヘッダーを受け入れ可能な解決策にしていますか? – Arpegius