问题描述
Weapon
继承自 Item
。
weapon
是类 Hero
的成员。我想将它与函数中传递的 item
交换,这也是本示例中的 Weapon
(我将添加更多案例)。
void Hero::equip(Item* item){
if(instanceof<Weapon>(item)){std::swap (item,static_cast<Item>(weapon));}
}
基本上,当英雄的物品栏中装备了某物时,我希望它存储在 Hero
的相应成员中,而之前装备的 item
可以存储回物品栏中,无论项目的类型。库存是一个 std::vector<Item*>
,因此它可以容纳多态项目。
向上转换 weapon
似乎不起作用,因为 Item
是虚拟的。我尝试过的所有其他类型的转换也失败了,因此尝试手动交换它们。如果您对 instanceof
感到疑惑,我复制了这个模板以便我可以在 C++ 中使用它:
template<typename Base,typename T>
inline bool instanceof(const T *ptr) {
return dynamic_cast<const Base*>(ptr) != nullptr;
}
当我使用 Item*
而不是 Item
时,我得到:
没有匹配的函数调用'swap(Item*&,Item*)'
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)