我正在開發一款遊戲,並試圖通過解析文本文件來實現一種智能方式,以C++創建npc對象。C++中的通用工廠
目前,這是硬編碼在一個工廠對象。像這樣:
IActor * ActorFactory::create(string actortype, Room * r, string name, int hp)
{
if(actortype == "Troll")
{
return new Troll(r, name, hp);
}
if (actortype == "Dragon")
{
return new Dragon(r, name, hp);
}
// ... and so on
throw "Can't recognize type '"+actortype+"'.";
}
這在我看來是非常醜陋的做法。由於它(除其他外)打破了Open/Closed principle。
我受過教育的Java和Java中我會做一些喜歡有計劃開始執行每個IActor報告它的類名和類類型的ActorFactory。然後,工廠將關係存儲在地圖中,然後可以輕鬆查找哪些字符串映射到哪個對象,然後可以輕鬆實例化它。
編輯:我也想有能力調用具有可變數量/類型參數的構造函數。
怎麼會變成這樣在C++做了什麼?可以做到嗎?
感謝您的答覆,但是這並不讓我有一個可變的參數列表。(不同量的參數和不同類型的) – 2009-11-16 10:15:54