c++ - 将基类的指针转换为继承类

标签 c++ pointers class oop type-safety

我正在开发一款类似 roguelike 的小型游戏,对于不属于 map 一部分的任何对象/“事物”都基于 XEntity 类。有几个依赖于它的类,例如 XPlayer、XItem 和 XMonster。

我的问题是,当我知道一个对象在项目中时,我想将一个指针从 XEntity 转换为 XItem。我用来捡起一个元素的示例代码是这样的,当一个不同的实体捡起它站立的元素时。

void XEntity::PickupItem()
{
    XEntity *Ent = MapList; // Start of a linked list

    while(true)
    {
        if(Ent == NULL) { break; }

        if(Ent->Flags & ENT_ITEM)
        {
            Ent->RemoveEntity(); // Unlink from the map's linked list

            XItem *Item = Ent // Problem is here, type-safety

            // Code to link into inventory is here

            break;
        }

        Ent = Ent->MapList;
    }
}

我的第一个想法是在 XEntity 中创建一个方法,该方法将自身作为 XItem 指针返回,但它会创建无法解析的循环依赖关系。

我对这个很困惑。非常感谢任何帮助。

最佳答案

如果您知道XEntityXItem,那么您可以使用静态转换。

XItem* Item = static_cast<XItem *>(Ent);

但是,您应该检查您的设计,看看您是否可以以一种不需要知道它是什么派生类型的方式对实体进行操作。如果您可以为基类提供足够丰富的接口(interface),您也许可以消除标志检查类型检查。

关于c++ - 将基类的指针转换为继承类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2523981/

相关文章:

c++ - 在没有 Xcode 的 Mac Bundle 中嵌入框架

c++ - 在 C++ 中插入到映射值对中的 multimap

c++ - 按参数中的 vector 类型重载函数

pointers - `access`参数模式有什么用?

c++ - 使用boost::bind将 map 作为参数传递

python - 类变量和实例变量的区别

c++ - 使用 cmake 强制构建 32 位或 64 位的选项

二维数组的正确下标排序

C、为什么我不能声明指针并初始化它?

C#,将字符串变量转换为类变量