C ++ - typeid (), usado na classe derivada não retorna o tipo correto

Talvez eu esteja entendendo mal como a herança funciona aqui, mas aqui está o meu problema:

Eu tenho uma opção de classe e uma classe RoomOption que deriva dela. Eu tenho outra sala de aula que contém um vetor de shared_ptrs. Na principal eu adiciono um RoomOption a esse vetor. Então, usando typeid () eu verifico o tipo, e ele me diz que é uma opção. Pelo que eu li, typeid deve retornar tipos derivados, e shared_ptrs não causam slicing, então não tenho certeza do que estou fazendo de errado.

Aqui está o código:

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

a Principal:

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>

Ocorre-me que, talvez, ao adicionar ou obter uma opção, o RoomOption é convertido como uma opção devido ao tipo de retorno / argumento. Se for esse o caso, como posso armazenar um vetor de mais de um tipo? Ou estou entendendo tudo errado? = \ Você está pedindo o typeid do ponteiro compartilhado. Tente obter o typeid da coisa que o ponteiro compartilhado contém.

questionAnswers(3)

yourAnswerToTheQuestion