我正在开发一个小型 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;
}
}
我的第一个想法是在 XEntity 中创建一个将自身作为 XItem 指针返回的方法,但它会创建无法解析的循环依赖关系。
我对这个很困惑。任何帮助是极大的赞赏。