私は、ゲームプロジェクトのさまざまなシングルトンマネージャー間で使用されるイベントベースのメッセージングシステムを作成しています。次のようにすべてのマネージャタイプ(InputManager、AudioManager、など)、メッセージの処理を容易にするために、ベース・マネージャークラスから派生し、またEventHandlerクラスから継承される:抽象クラスへの型キャスト?
他の場所class Manager
{ ... }
class EventHandler
{ ...
virtual void onEvent(Event& e) =0;
...
}
class InputManager : public Manager, public EventHandler
{ ...
virtual void InputManager::onEvent(Event& e);
{ ... }
}
IすべてのEventHandlerを追跡EventManagerを有します複数の受信者にイベントをブロードキャストするために使用されます。私はシングルトンマネージャのすべてを初期化していたときに
class EventManager
{...
addHandlerToGroup(EventHandler& eh);
{ ... }
...
}
は当然のことながら、私は彼らがEventManagerのリストに作成されているとして、それらを追加することにしたいです。私の問題は、MVC++がコンパイル時に不平を言うことです。私は次のようにそれが働くだろうと思った:
int main()
{ ...
EventManager* eventM = new EventManager();
...
InputManager* inputM = new InputManager();
eventM->addHandlerToGroup(dynamic_cast<EventHandler>(inputM));
}
コンパイラ、しかし、「抽象クラスへのキャストが許可されていません。」と私に知らせます私はあなたができることの印象を受けていました...結局のところ、ポリモーフィズムは、それらが解釈される基底クラスにどれほど近づいているかに関して少しの柔軟性をもってオブジェクトを前後に渡すことなく、あなたをあまり良くしません。私の現在の回避策は次のようになります。
int main()
{ ...
EventManager* eventM = new EventManager();
EventHandler* temp;
...
InputManager* inputM = new InputManager();
temp = inputM;
eventM->addHandlerToGroup(*inputM);
}
どの、私の知る限り、もう少し詳細なとあまり直感的な場合、私は、達成しようとしている何のために概念的に同じです。多態性の型キャスティングがどのように機能するかについては、私は完全にオフですか?どこが間違っていますか? EventManager
で
[C++のこのような "インタフェース"](http://stackoverflow.com/questions/318064/how-do-you-declare-an-interface-in-c) – ZagNut
"dynamic_cast(inputM)); '"なぜ 'dynamic_cast'ですか? –
curiousguy
@curiousguy正直言って、それは私が試した様々なキャストの最後でした。私は派生から基本に行くので、概念的には、私はstatic_castが私が使用するものだと考えました。それがうまくいかなかったとき、私は絶望の中で他のタイプキャストを繰り返しました。 – ketura