1

C ++(C ++ 11ではない)のシミュレーションフレームワークの設計オプションを整理するのに助けが必要です。ユーザーは「イベントディスパッチャー」を作成し、「イベント」の発生に対する関心を(「ウォッチャー」を使用して)登録します。ディスパッチャは、イベントのアクティブ化を検出し、ウォッチャーへの通知を管理するために使用される「イベントソース」を内部的に保持します。ウォッチャー、イベント、イベントソースクラスの間には1:1:1のマッピングがあります。

システムを拡張したい

  1. イベントウォッチャーのサブセットをディスパッチャーにのみ登録する機能(サポートされていない通知の要求は失敗します)
  2. イベントソースの代替実装(たとえば、イベントごとに1人または複数のウォッチャー)
  3. 拡張イベントタイプ(つまり、継承)。WatcherとSourceは、機能は低下しますが、サブクラスを基本タイプであるかのように処理できます。
  4. ユーザー定義のイベント、イベントソース、およびイベントウォッチャー。まったく新しいイベントの場合

「イベント型識別子」(文字列またはBase.Derived表記のいずれか)の使用を検討しましたが、機能しますが、正しくないと感じます(たとえば、型の安全性は実行時の整数に依存し、継承は制限され、型キャストが多すぎます...)コード構造とメカニズムの提案をいただければ幸いです。

4

1 に答える 1

0

これはまさに を使用するのに適した状況dynamic_castです。必要なのは 1 か所だけです。

すべてのイベントは単一の基本クラスから継承され、すべてのイベント ハンドラーは (別の) 単一の基本クラスから継承されます。これにより、すべてのイベント ソースとディスパッチャが統一されます。イベントは、基本クラスのハンドラーによってチェックおよびフィルター処理されます。

これは、全体の構造がどのように見えるかを示す 10 分間の大まかなスケッチです。イベント ソースがどのように見えるべきか完全に明確ではないため、スケッチにはイベント ソースがありません。からイベントを発生させるだけmain()です。

于 2012-12-25T20:27:22.850 に答える