У меня есть очередь, содержащая объекты класса Event.Функциональный полиморфизм с ссылочными данными Тип
std::priority_queue<Event> events;
Но событие - это просто суперкласс реальных событий. Давайте предположим, что мы имеем следующие классы:
class Event{
public:
void Action(){
std::cout<<"do nothing"<<std::endl;
}
};
class XEvent : public Event{
public:
void Action(){
std::cout<<"do x"<<std::endl;
}
class YEvent : public Event{
public:
void Action(){
std::cout<<"do y"<<std::endl;
}
};
и в главной функции:
int main(){
std::vector<Event> events;
events.push_back(XEvent x);
events.push_back(YEvent y);
Event e = events[0];
e.Action();
}
хочу e.Action вести себя в соответствии с перегруженной версии. (т. Е. «Делать x»).
Но вместо этого выход дает мне «ничего не делать». Любое предложение?
p.s. Im фактически ищет способ сделать это без использования указателей
Читайте о нарезания. Вектор должен быть «std :: vector> события; скорее. –