我有一个工厂方法类,它生成“项目”并返回一个指向它创建的项目的指针。
我有 Item 的派生类。例如,Item 可以是“武器”、“消耗品”或“盔甲”。
我需要检测创建了哪种类型的项目,以便我可以正确地将项目转换为该类型。我做了一些测试行,看起来它正在做我想做的事,除了添加一个与类型相关的数字。
例子:
我有这行:
cout << "Type Created: " << typeid(pItem).name() << endl;
它返回基类 Item,但它会显示:“4Item”
然后我将其更改为:
cout << "Type Created: " << typeid(*pItem).name() << endl;
这会给我正确的派生类型,但也会输入那个数字。所以我得到类似“5Armor”的东西
为什么 pItem 返回基类?为什么它会返回一个 int 类型?我怎样才能删除int?
一个做我想要的解决方案 - 以一种“作弊”的方式:
string type;
string returnedType = typeid(*pItem1).name();
for (int i=1; i < returnedType.length(); i++){
type.push_back(returnedType[i]);
}
cout << "type: " << type << endl;
谢谢