我正在研究一個小型的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指針,但它創建循環依賴是無法解決的。
我對這個很難過。任何幫助是極大的讚賞。
目前的做法是爲了一個簡單的原型。目前設計非常混亂,需要以更清晰的方式重新編寫。 – 2010-03-26 20:26:18