include <typeinfo>
vector<Console*> consoles;
Console* sony = new Sony();
cout << typeid(sony).name() << endl; // typeid name == 4Sony
consoles.push_back(sony);
cout << typeid(*consoles.back()).name() << endl; // typeid name == 7Console
Console* microsoft = new Microsoft();
consoles.push_back(microsoft);//the same happens with microsoft consoles
這基本上就是我想要做的事:當我將對象添加到矢量時,爲什麼typeid名稱會更改?
for(int i = 0; i < consoles.size(); i++){
if(typeid(*consoles[i]).name() == typeid(Sony).name()){
//cout << "it's a sony console" << endl;
}
}
我不能這樣做,因爲控制檯變化typeid的名字後,我將它添加到載體,所以是有辦法將控制檯的typeid名稱添加到向量後保持不變?
如果你想要的是能夠通過類型區分實例,那麼這個問題和答案可以進一步幫助:http://stackoverflow.com/a/500495/1566187 – Elyasin
可能你的基類是非多態的。確保它至少有一個虛函數 –
我不能相信我忘了多態性,這是問題,謝謝 –