科学シミュレーションプラットフォームをJavaからC++に変換しました。以前の実装と可能な限り同じデザインを維持するように努めました。Javaでは、バインディングが遅いため、循環依存関係は実行時に解決されます。ただし、循環依存関係により、C++では混乱が生じています。
サーキュラーインクルードとリファレンスを分析して一覧表示する自動化ツールはありますか?(Visual Studio 2010は、ナンセンスエラーの膨大なリストのみを発行します)。
可能な限り前方参照を使用しようとしました。ただし、場合によっては、両方のクラスが他のクラスの機能を必要とします(つまり、前方参照を使用できないようにするメソッドの呼び出し)。これらのニーズはLogicに存在し、設計を根本的に変更すると、現実世界の相互作用を表すことはなくなります。
お互いのメソッドとステータスを必要とする2つのクラスをどのように実装できますか?それらをC++で実装することは可能ですか?
例:
- 例1:「Agent」タイプのオブジェクトを作成する「World」というクラスがあります。エージェントは、その環境の情報を取得するためにWorldメソッドを呼び出す必要があります。Worldはまた、エージェントを反復処理し、「run」メソッドを実行してステータスを取得する必要があります(ステータスの更新は、問題のこのセクションを解決するために逆に行われる可能性がありますが、runメソッドは解決されません)。
- 例2:エージェントは「意図」のコレクションを作成します。各エージェントは、その意図と実行/更新/読み取り意図のステータスを反復処理する必要があります。また、エージェントを介して環境に関する情報を取得する必要があります(「ワールド」を介して直接実行すると、複雑な円が再び作成されます)。また、エージェント自体の情報も取得する必要があります。
次の図は、クラスのサブセットと、それらのメソッドおよびプロパティの一部を示しています。