私はネットワーク経由でコマンドを取得し、これらを特定の関数に割り当てるプログラムを持っています。そして今、私はフォルダに.dllファイルを追加できるプラグイン機能を実装したいと思います。次のステップは、コマンドに基づいてdllのメソッドを呼び出すことです。反射+関数ポインタ対オブザーバパターン
私はこの問題を解決する方法を2つのアイデアを持っていますが、私はよりパフォーマンス/優れているこれらのどの知らない:
が反射して、DLLからすべてのメソッド+コマンドを初期化し、
std::map<std::string, void(*func)(args...)>
に保存。プログラムがコマンドを受け取ると、マップ内の関連する関数を検索して呼び出します。実行時にdllをロードし、
std::string
を実装しているすべてのdllの引数に渡すインターフェイスを作成します。 DLLのメソッドは、if
ステートメントを使用してコマンドをチェックしてそこで処理することができます。 (オブザーバーパターン)
私が言及していないより良いオプションがある場合はお知らせください。プラグインのDLLによって実装された特異なインタフェースを強制
どのような用語が間違っているのですか?質問を編集できますか?オプション2は、より多くの穴を開けるか、ちょうど「クリーナー」ですか? –