也許我誤解繼承將如何在這裏工作,但這裏是我的問題:C++ - typeid的(),在派生類中使用不返回正確的類型
我有一個類選項,而一個類RoomOption是導出從中。我有另一個課室,裏面有一個shared_ptrs的矢量。主要我添加一個RoomOption到該矢量。然後,使用typeid()我檢查類型,它告訴我它的一個選項。從我讀過的,typeid應該返回派生類型,shared_ptrs不會導致切片,所以我不知道我做錯了什麼。
下面的代碼:
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];
}
主:
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>
它發生,我認爲也許當添加或獲取選項Roo由於返回/參數類型,mOption作爲選項被鑄造。如果是這種情況,那麼我應該如何存儲多種類型的矢量?還是我得到這一切都錯了? = \
您正在詢問共享指針的typeid。嘗試獲取共享指針所包含的事物的typeid。 – Mat 2012-07-14 13:10:49
使用dynamic_cast檢查類型。除此之外,您獲取shared_ptr – Paranaix 2012-07-14 13:12:46
的typeid返回選項* – 2012-07-14 13:13:55