C++ キャスト演算子について質問があります。
クラスMessage
といくつかのサブクラスがあるとしますMessage1
Message 2
。
Event
Eventのクラスとさまざまなサブクラスがあるとします。Event 1
Event 2
ID
どちらの場合も、サブクラスの型と(フィールドなど)を区別できます。
class Message {
....
int MessageID;
}
class Message1 : public Message {
//other fields;
}
class Message2 : public Message {
//other fields;
}
class Event {
int eventID;
}
class Event1 {
Message theMessage;
Message getMessage();
}
class Event2 {
Message theMessage;
}
この場合、インスタンス Event1 または Event2 を に挿入します。vector<Event>
キャリアによってイベントを抽出するときに、Event1 のインスタンスがあることは確かですが、static_cast
?を使用するのは正しいことです。例えば:
Event theEvent = myVector.at(i);
Event1 *e1 = static_cast<Event1*>(&theEvent);
if(e1->getID() == xxx) {
Message2 *m2 = static_cast<Message2*>(&e1->getMessage());
}
問題があります: 最後のキャストの後、インスタンス情報が Message2 として表示されません (常にその親クラス Message の情報のみ)。この場合、dynamic_cast を使用する必要がありますか?