C ++ - typeid (), używany w klasie pochodnej, nie zwraca poprawnego typu

Może nie rozumiem, jak działa tutaj dziedziczenie, ale oto mój problem:

Mam opcję klasy i wywodzącą się z niej klasę RoomOption. Mam inny pokój klasy, w którym znajduje się wektor shared_ptrs. W głównej części dodaję RoomOption do tego wektora. Następnie, używając typeid (), sprawdzam typ i informuje mnie o swojej opcji. Z tego co przeczytałem, typeid ma zwracać typy pochodne, a shared_ptrs nie powodują przecinania, więc nie jestem pewien, co robię źle.

Oto kod:

Room.h:

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];
}

Główny:

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>

Wydaje mi się, że być może podczas dodawania lub uzyskiwania opcji RoomOption jest rzutowane jako opcja z powodu typu return / argument. Jeśli tak jest, to jak mam przechowywać wektor więcej niż jednego typu? A może źle to rozumiem? =

questionAnswers(3)

yourAnswerToTheQuestion