2017-08-14 7 views
-1

私はネットワーク経由でコマンドを取得し、これらを特定の関数に割り当てるプログラムを持っています。そして今、私はフォルダに.dllファイルを追加できるプラグイン機能を実装したいと思います。次のステップは、コマンドに基づいてdllのメソッドを呼び出すことです。反射+関数ポインタ対オブザーバパターン

私はこの問題を解決する方法を2つのアイデアを持っていますが、私はよりパフォーマンス/優れているこれらのどの知らない:

  1. が反射して、DLLからすべてのメソッド+コマンドを初期化し、std::map<std::string, void(*func)(args...)>に保存。プログラムがコマンドを受け取ると、マップ内の関連する関数を検索して呼び出します。

  2. 実行時にdllをロードし、std::stringを実装しているすべてのdllの引数に渡すインターフェイスを作成します。 DLLのメソッドは、ifステートメントを使用してコマンドをチェックしてそこで処理することができます。 (オブザーバーパターン)

私が言及していないより良いオプションがある場合はお知らせください。プラグインのDLLによって実装された特異なインタフェースを強制

答えて

0

あなたが欲しいものを記述するために間違った用語を使用していますが、私はオプション2が「クリーン」であると言うでしょうが

は確立のベストプラクティスの方法です。私の意見では、あなたが求めている依存性注入の一種。

+0

どのような用語が間違っているのですか?質問を編集できますか?オプション2は、より多くの穴を開けるか、ちょうど「クリーナー」ですか? –