これが私の状況です:
すべてのハンドラーがIHandler
クラスから派生し、onEvent(const Event &event)
メソッドを実装するイベント駆動型システムがあります。現在、Eventはすべてのイベントの基本クラスであり、列挙されたイベントタイプのみが含まれています。EventKey
2つのフィールドを持つイベントを含め、すべての実際のイベントはそれから派生します:(uchar) keyCode
と(bool) isDown
。
ここに興味深い部分があります:私EventKey
は次の構文を使用してイベントを生成します:
Event evt = EventKey(15, true);
そして私はそれをハンドラーに出荷します:
EventDispatch::sendEvent(evt); // void EventDispatch::sendEvent(const Event &event);
(EventDispatch
のリンクリストが含まれ、送信されたイベントを含むパラメーターを使用しIHandlers
てメソッドを呼び出します。onEvent(const Event &event)
さて、実際の質問:
ハンドラーにタイプのキュー内のイベントをポーリングさせたいEvent
としましょう。どうすればよいですか?
参照カウントを使用する動的ポインターは、ソリューションが大きすぎるように聞こえます。
基本タイプへの参照しか受け取っていないため、コピーを作成するのは思ったより難しいです。したがって、イベントのタイプを確認するたびに、アップキャストしてから
EventKey
コピーを作成してキューに保存する必要があります。唯一の解決策のように聞こえますが、すべての種類のイベントを知る必要があり、受信したすべてのイベントについて確認する必要があるため、不快です。悪い計画のように聞こえます。イベントを動的に割り当ててから、それらのイベントへのポインターを送信し、必要に応じてそれらを配列にエンキューすることができますが、参照カウントを使用する以外に、そのメモリを追跡するにはどうすればよいですか?ユーザーの邪魔にならない非常に軽い参照カウンターを実装する方法を知っていますか?
この設計の良い解決策は何だと思いますか?