<分区>
我正在开发一款游戏,并尝试实现一种通过解析文本文件在 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++ 中如何完成?可以吗?