如何在 C++ 中交换父指针和子指针?

问题描述

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 (将#修改为@)