【发布时间】:2010-12-17 00:06:56
【问题描述】:
我正在开发一款游戏,并试图实现一种智能方法,通过解析文本文件在 C++ 中创建 npc 对象。
目前这是在工厂对象中硬编码的。像这样:
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++ 中如何实现?能做到吗?
【问题讨论】: