2016-03-29 6 views
0

私はマイクロコントローラのCANインターフェイスからフレームをキャプチャするC++クラスAを持っています。私はクラスAによってキャプチャされたフレームを1つずつ使用する別のクラスB(およびCとD ..)を実装しようとしています。本質的に、クラスAは、キャプチャされたフレームを、フレームの内容に応じて上位レイヤからのクラスの1つにリダイレクトする。私はフレームを受け取るたびにイベントがクラスのオブジェクトに対して上位層から呼び出されるような、ある種のイベント処理メカニズム(プログラミングの初心者ではあまり知られていない)を実装する必要がありますか?または、クラスAからクラスB、C、...を継承してこれを達成できますか?ここで良い、簡単なロジックを開発する方法を手伝ってくれますか?異なるクラスのオブジェクト間のイベント処理

編集:私はクラスAのswitch文を持っていて、クラスB、C、Dのいずれかのprocessメソッドを呼び出します。値。しかし、これは賢明な方法ではありません。なぜならクラスAはクラスB、C、D ...などを使用しているからです。クラスAは、クラスB、C、D、などについては知りません。

+0

"仕事/プロセス"関数を宣言するプロセッサーごとに共通のインターフェース(基本クラス)を定義しているでしょう。私はそれらをすべてコンテナに保管します。クラスAを使用してフレームを取得し、それをリストコントローラのそれぞれに渡す「コントローラ」クラスがあります。今、コントローラのリストをどのように生成するかは、注文が重要かどうかに応じて決まります。 –

+0

私は編集を行いました。もう一度見てもらえますか? – Paindoo

+0

私はそれを得る、あなたはクラスB、CまたはDの1つだけがフレームを処理できることを意味します。フィールド値のどれかを知っています。これは、ファクトリデザインパターンの非常に一般的な使い方です。Googleでそれを見てください。どちらが分からない場合は、あまり一般的ではない責任パターンの連鎖を使用することができますが、必要に応じてその疑似コードを書くことができます。 –

答えて

0

たとえば、クラスAにはstd::list<B*>が含まれています。ここで、Bは、ハンドラメソッドであるvirtualの基本クラスです。いくつかのクラス(C、D、E)はクラスBを継承し、このメソッドをオーバーロードします。次に、派生クラスのインスタンスをポインターでAにリストし(例:​​std::list<B*> workers {new C, new D, new E};)、インスタンスごとにオーバーロードされたメソッドを呼び出します。各クラスは、現在のフレームを受け入れ、それ自身の方法で処理するかどうかを判断します。

0

Observer design patternをご覧ください。基本的に、観察可能なクラス(あなたの場合は)と複数のオブザーバー(あなたの場合class Bclass Cなど)を持つことができます。オブザーバーは、イベント通知のために観察可能なクラスに自身を登録します。オブジェクト間のQtスタイルの接続を可能にするサンプルコードEventInterface Modelがあります。アプリケーションが必要とするのは、オブザーバブルオブジェクトのイベントをオブザーバオブジェクトのイベントハンドラに接続することだけです。

関連する問題