C ++(C ++ 11ではない)のシミュレーションフレームワークの設計オプションを整理するのに助けが必要です。ユーザーは「イベントディスパッチャー」を作成し、「イベント」の発生に対する関心を(「ウォッチャー」を使用して)登録します。ディスパッチャは、イベントのアクティブ化を検出し、ウォッチャーへの通知を管理するために使用される「イベントソース」を内部的に保持します。ウォッチャー、イベント、イベントソースクラスの間には1:1:1のマッピングがあります。
システムを拡張したい
- イベントウォッチャーのサブセットをディスパッチャーにのみ登録する機能(サポートされていない通知の要求は失敗します)
- イベントソースの代替実装(たとえば、イベントごとに1人または複数のウォッチャー)
- 拡張イベントタイプ(つまり、継承)。WatcherとSourceは、機能は低下しますが、サブクラスを基本タイプであるかのように処理できます。
- ユーザー定義のイベント、イベントソース、およびイベントウォッチャー。まったく新しいイベントの場合
「イベント型識別子」(文字列またはBase.Derived表記のいずれか)の使用を検討しましたが、機能しますが、正しくないと感じます(たとえば、型の安全性は実行時の整数に依存し、継承は制限され、型キャストが多すぎます...)コード構造とメカニズムの提案をいただければ幸いです。