我正在开发一款游戏,并试图通过解析文本文件来实现一种智能方式,以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