Может быть, я неправильно понимаю, как здесь работает наследование, но вот моя проблема:
У меня есть класс Option и производный от него класс RoomOption. У меня есть еще одна комната класса, которая содержит вектор общих _точек. В основном я добавляю RoomOption к этому вектору. Затем, используя typeid (), я проверяю тип,и он говорит мне, что это вариант. Из того, что я прочитал, предполагается, что typeid возвращает производные типы, а общие _ptrs не вызывают нарезки, поэтому я не уверен, что делаю неправильно.
Вот код:
Комната.ч:
vector<shared_ptr<Option> > options;
void addOption(shared_ptr<Option>);
shared_ptr<Option> getOption(int);
Room.cpp:
void Room::addOption(shared_ptr<Option> option){
options.push_back(option);
}
shared_ptr<Option> Room::getOption(int i){
return options[i];
}
главная:
shared_ptr<Room> outside(new Room(0, "", ""));
outside->addOption(shared_ptr<RoomOption>(new RoomOption(0, "Go inside", hallway)));
cout<<typeid(player->getRoom()->getOption(0)).name().get()<<endl;
//This line prints "class std::tr1::shared_ptr<class Option>
Мне приходит в голову, что, возможно, при добавлении или получении опции RoomOption приводится как опция из-за типа возврата/аргумента. Если это так, то как я должен хранить вектор более чем одного типа? Или я все неправильно понимаю? =\