Tal vez estoy malentendido cómo funciona la herencia aquí, pero aquí está mi problema:C++ - typeid(), que se utiliza en la clase derivada no regresa tipo correcto
tengo una opción de clase, y una RoomOption clase que se deriva de eso. Tengo otra clase que contiene un vector de shared_ptrs. En main, agrego un RoomOption a ese vector. Luego, usando typeid() controlo el tipo, y me dice que es una Opción. Por lo que he leído, se supone que typeid devuelve tipos derivados, y shared_ptrs no causa slicing, por lo que no estoy seguro de lo que estoy haciendo mal.
Aquí está el 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];
}
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>
Se me ocurre que tal vez cuando agregando u obteniendo una Opción, el Roo mOption se lanza como una Opción debido al tipo de devolución/argumento. Si ese es el caso, entonces, ¿cómo se supone que debo almacenar un vector de más de un tipo? ¿O estoy entendiendo todo mal? = \
Está pidiendo el tipeo del puntero compartido. Intente obtener el tipo de elemento que contiene el puntero compartido. – Mat
usa un dynamic_cast para verificar los tipos. Además de que su obtener el typeid de la shared_ptr – Paranaix
Opciones de devoluciones * –