У меня есть вопрос о операторах слияния C++.Операторы C++ и литья
Предположим, у вас есть класс Message
и несколько подклассов: Message1
Message 2
и т.д.
Предположим, у вас есть класс 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;
}
вставить экземпляры Даже t1 или 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?
Если вектор всегда содержит объекты типа 'Event1', создайте его как контейнер объектов Event1. В противном случае используйте виртуальные функции или 'dynamic_cast' –