我正在开发一款类似 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 指针返回,但它会创建无法解析的循环依赖关系。
我对这个很困惑。非常感谢任何帮助。
最佳答案
如果您知道XEntity
和XItem
,那么您可以使用静态转换。
XItem* Item = static_cast<XItem *>(Ent);
但是,您应该检查您的设计,看看您是否可以以一种不需要知道它是什么派生类型的方式对实体进行操作。如果您可以为基类提供足够丰富的接口(interface),您也许可以消除标志检查类型检查。
关于c++ - 将基类的指针转换为继承类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2523981/