私は新しい分野に入っていますが、基本的にC++でコールバックを実装する必要があります。私は自分の人生を単純化するために使うツールキットを設計しています。基本的には、他の.dllプラグインに多くの機能を公開する.dllプラグインです。C++コールバック?メンバー関数ポインタ/代理人/イベントを使用する必要がありますか?
これらの関数の1つは、HookEvent(const char * event_name、void * callback)です。これにより、発生するさまざまなイベントをフックできます。ここに例があります...
Example_Plugin1.dllはHookEvent( "player_spawn"、& Plugin1 :: Event_PlayerSpawn)です。 Example_Plugin2.dllはHookEventを実行します( "player_spawn"、& Plugin2 :: Event_PlayerSpawn)。
これでうまくいくコールバックシステムを設定するには、最良の(そして、できるだけ簡単な)方法を見つけ出す必要があります。私は数時間前からC++コールバックを読んできましたが、かなりのアプローチがありました。
私はテンプレートを作るのが最も簡単なことを想定し、typedef bool(ClassName :: * EventHookCallback)(IGameEvent、bool);を使用します。それから、私はちょっと曇っています。
また、デリゲートや.NETスタイルのイベントシステムが他の方法でも使用できることも読んでいます。私はすでに幾分混乱しているので、もっと自分を混乱させたくはありませんが、質問する価値があると考えました。
私が読んでいたC++ .NETスタイルイベントシステムへのリンクです。 http://cratonica.wordpress.com/2010/02/19/implementing-c-net-events-in-c/
あなたは何をお勧めしますか?それを実装するまでのヒントは、最も高く評価されます。
できるだけBoostや別のライブラリを使用せずにやりたいと思っていました。メンバー関数のポインタや代理人を使用するのとは対照的に、これは本当に簡単でしょうか? –
シンプルなコールバックが必要な場合、これは過剰です。完全なObserverパターンの実装には、これが役に立ちます。コスト/利益の決定は、期待されるニーズに依存します。あなたのコンパイラにC++ 0xを持っていれば、ラムダ(ローカルの無名関数)を '代理人'にすることさえできます。これをチェックしてください:http://uint32t.blogspot.com/2009/05/using-c0x-lambda-to-replace-boost-bind.html –
私は実際にそれが好きですが、私はちょうどこれと一緒に行くつもりだと思います私がこれまで見てきたものの中で私が最も理解しやすいように思えるシステムです。 http://cratonica.wordpress.com/2010/02/19/implementing-c-net-events-in-c/ –