私は、拡張可能なアーキテクチャのためのC++プラグインフレームワークを設計(ブレーンストーミング)しています。 各プラグインはインターフェイスを登録します。これはプラグイン自体で実装されています。 このようなフレームワークは比較的能力の高い組み込みデバイス(Atom/ARMなど)で動作しているため、STLとBoostを使用できます。C++でのプラグインフレームワーク
現時点では、インターフェイスが事前にわかっていて、プラグイン(ダイナミックライブラリからロードされている)がそれらを実装しているオブジェクトを登録する類似のフレームワークを作成しています。これらのオブジェクトは、必要に応じてファクトリメソッドによってインスタンス化され、メソッドは正しく呼び出されます。
プラグインが新しいインターフェイスを登録して(既存のインターフェイスを実装するだけでなく)、フレームワークユーザーがAPIを利用できるようにして、より柔軟にしたいと考えています。
私はstd :: map < std :: string、FunctionPtr >を使用することを考えました。これは、私が読んだいくつかの記事とstackoverflowの返信でも言及されています。残念ながら、異なるメソッドインターフェースのケースをキャプチャしているようには見えません。
私はテンプレートメタプログラミング、またはおそらく形質と関係があるかもしれないと思っていますが、どのように正確に機能するかはわかりません。誰も助けることができますか?
ありがとうございます、私は今のタイプの特性を試してみるつもりです、そして私はBoost.Extensionも見ていきます。 Vollmannの記事は本当に面白いですが、その解決策が「安全」であるかどうかについては非常に心配しています。カプセル化がちょっとねじれているように見えます:) – rippeltippel