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
可能你的基类是非多态的。确保它至少有一个虚函数 –
我不能相信我忘了多态性,这是问题,谢谢 –