4

ヘルス クラブのシミュレーションを実行するアプリケーションを C++ で作成しています。ユーザーは最初にシミュレーション データ (3 つの整数値) を入力し、実行を押します。その後、ユーザー入力はありません - とても簡単です。

シミュレーションを開始した後、多くのロジックは下位クラスの奥深くにありますが、それらの多くは単純な出力メッセージを UI に出力する必要があります。オブジェクトは UI に出力する必要がありますが、動作し続ける必要があるため、メッセージを返すことはできません。

UI オブジェクトへの参照を、それを必要とするすべてのクラスに渡すつもりでしたが、かなりの数の参照を渡すことになりました。もっと良い方法があるはずです。

私が本当に必要としているのは、UI の printOutput(string) 関数を cout << string; と同じくらい簡単に (またはそれほど難しくなく) 呼び出すことができるものです。

UI には、displayConnectionStatus(bool[] connections) メソッドもあります。

UI は抽象的な「UserInterface」クラスを継承するため、単純なコンソール UI と GUI を簡単に変更したり変更したりできることに注意してください。

このリンクを UI に実装する方法を教えてください。

グローバル関数を使用する場合、使用するように選択した UserInterface 実装のメソッドを呼び出すようにリダイレクトするにはどうすればよいですか?

4

2 に答える 2

4

グローバルを恐れないでください。

グローバル オブジェクトはカプセル化に悪影響を及ぼしますが、即時の再利用性を考慮しない対象を絞ったソリューションの場合、グローバル オブジェクトは問題ありません。

シミュレーションからのイベントを処理するグローバル オブジェクトを公開します。その後、イベントを印刷したり、電子メールで送信したり、OpenGL でレンダリングしたり、好きなものを使用したりできます。レポート コールバックを介してシミュレーション内で何が起こるかをキャッチする統一されたインターフェイスを作成し、必要に応じてこのグローバル オブジェクトをサブクラス化できます。

オブジェクトがグローバルでない場合は、すべてのコードベースにポインターを渡すことになります。

于 2013-03-01T18:18:35.780 に答える
0

ロギング フレームワーク、つまりデータを取得してデータをログに記録する関数を取得した独自のクラス LogMessages を使用することをお勧めします。これは、UI、ファイル、ネットワークなどを介して行うことができます。

また、ロギングが必要な各クラスは、ロギング クラスを使用できます。

このようにして、グローバルと一般的なソリューションを回避できます。また、オープン ソースの C/C++ Diagnostic Logging API ライブラリであるhttp://www.pantheios.org/も参照してください。それも使用できます...

于 2013-03-01T18:26:12.723 に答える