我不确定我是否将标题命名为正确,但我会描述,我在想什么:
我正在制作游戏,现在我达到了一个我想重构一切的地步。我现在要重构的部分是从文件中读取配置和设置。
到目前为止,我曾经将信息存储在std::map<MY_ENUM,std::string>
中,然后每当我需要读取我从getter返回的值时,将其解析为代码(在很多地方 - >不良做法) 。顺便说一句,配置/设置文件的格式很简单:每行包含键和值。
现在,我想到了几个升级:
使用模板功能,它将返回我需要的类型。我不需要在任何地方解析它而是需要值,而是在一个地方解析它。该函数看起来像ResourceManager::Get<int>(CONNECTION_TIMEOUT_LIMIT)
。但是,存在对变量进行错误解释的风险。有人可以将一个变量解析为字符串,而应该将其解析为float。
为了简单起见,朋友提出只需要让所有变量成为类的成员,这样它们就会被强类型化,一旦存储它们就不需要解析它们。
最后,第三种方法是我想问的问题,如果它在c ++中是可能的(我相信它是,但我无法弄清楚),以及它是如何完成的。
假设我们在配置文件中有两个条目:
PLAYER_NAME John Doe
CONNECTION_TIMEOUT 5
我想象它会起作用的方式是,我会有函数,它将返回一些表示已加载条目的对象,该函数将具有根据条目具有特定类型的函数。
ResourceManager::get(PLAYER_NAME).getValue() // returns string
ResourceManager::get(CONNECTION_TIMEOUT).getValue() // returns int
我意识到这不适用于简单的继承类,因为你不能从同一个函数返回不同的类型。