将基类的指针转换为继承的类

Sha*_*ley 3 c++ oop pointers class type-safety

我正在开发一个小型的roguelike游戏,对于任何不属于地图的对象/"事物"都是基于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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

我对这个很难过.任何帮助是极大的赞赏.

CB *_*ley 7

如果您知道XEntity是真的,XItem那么您可以使用静态演员.

XItem* Item = static_cast<XItem *>(Ent);
Run Code Online (Sandbox Code Playgroud)

但是,您应该检查您的设计,看看您是否可以以某种方式对该实体进行操作,这意味着您不需要知道它是什么派生类型.如果您可以为基类提供足够丰富的接口,则可以消除标记检查类型检查.