gpt4 book ai didi

c++ - 你如何从一个基础对象向下转换为一个子对象

转载 作者:行者123 更新时间:2023-11-30 03:52:20 25 4
gpt4 key购买 nike

struct BaseObject
{};

struct HardMonster : BaseObject
{
int Berserk(int);

private:
std::list<BaseObject> MonsterList;
};

我将所有怪物都定义为一个 BaseObject,因此更容易列出它们。但是当我需要将 BaseObject 转换为 HardMonster 以便我可以使用 Berserk 函数时。我知道,我可以轻松做到这一点,只需制作一个临时 Hardmonster 来计算 Berserk 的伤害。但我想以正确的方式去做。

最佳答案

如果您使用:

list<BaseObject> MonsterList; //This is where the Object list is defined.

您将只存储 BaseObject秒。如果您将任何派生类型的对象添加到列表中,您将丢失存储对象中的派生类型部分。

进一步阅读:What is object slicing?

您需要存储的是指向BaseObject 的指针,最好是智能指针。

std::list<std::shared_ptr<BaseObject>> MonsterList;

来自std::shared_ptr<BaseObject> , 你可以得到一个 std::shared_ptr<HardMonster>通过使用 dynamic_pointer_cast .

std::shared_ptr<BaseObject> baseObject;
std::shared_ptr<HardMonster> monster = std::dynamic_pointer_cast<HardMonster>(baseObject);
if ( monster )
{
// The cast is successful...
// Use monster
}

关于c++ - 你如何从一个基础对象向下转换为一个子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30737700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com