C++ -typeid (), используемый в производном классе, не возвращает правильный тип

Может быть, я неправильно понимаю, как здесь работает наследование, но вот моя проблема:

У меня есть класс 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 приводится как опция из-за типа возврата/аргумента. Если это так, то как я должен хранить вектор более чем одного типа? Или я все неправильно понимаю? =\

8
задан Jean Finley 14 July 2012 в 13:17
поделиться