C ++ - typeid (), das für abgeleitete Klassen verwendet wird, gibt nicht den richtigen Typ zurück

Vielleicht verstehe ich falsch, wie Vererbung hier funktioniert, aber hier ist mein Problem:

Ich habe eine Klassenoption und eine Klasse RoomOption, die sich daraus ableitet. Ich habe einen anderen Klassenraum, der einen Vektor von shared_ptrs enthält. In der Hauptsache füge ich diesem Vektor eine RoomOption hinzu. Dann überprüfe ich mit typeid () den Typ und er sagt mir, dass es eine Option ist. Nach dem, was ich gelesen habe, soll typeid abgeleitete Typen zurückgeben, und shared_ptrs verursachen kein Slicing. Daher bin ich mir nicht sicher, was ich falsch mache.

Hier ist der Code:

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

Main:

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>

Ich habe den Eindruck, dass die RoomOption beim Hinzufügen oder Abrufen einer Option aufgrund des Rückgabe- / Argumenttyps als Option umgewandelt wird. Wenn das der Fall ist, wie soll ich dann einen Vektor von mehr als einem Typ speichern? Oder verstehe ich das alles falsch? = \ Sie fragen nach der Typ-ID des freigegebenen Zeigers. Versuchen Sie, die Typ-ID des Objekts zu ermitteln, das der freigegebene Zeiger enthält.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage