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指针返回,但它创建了无法解析的循环依赖项.
我对这个很难过.任何帮助是极大的赞赏.
如果您知道这XEntity是真的,XItem那么您可以使用静态演员.
XItem* Item = static_cast<XItem *>(Ent);
Run Code Online (Sandbox Code Playgroud)
但是,您应该检查您的设计,看看您是否可以以某种方式对该实体进行操作,这意味着您不需要知道它是什么派生类型.如果您可以为基类提供足够丰富的接口,则可以消除标记检查类型检查.