我有一个系统,会有一些配置文件,我希望能够指定一些设置,例如:
size: 10
message: "foo"
data: 12,12,39
我可以解析这些作为键值对的容器,如std::unordered_map
。但是,当实际应用这些设置时,我无法准确找出存储类型的最佳方法或将其转换为必要的,让我解释一下。
我可以根据配置文件中:
之后的字符串推断出值的类型。但是,我需要将此类型与我的键/值对中的值一起存储。所以我最终得到:
enum class TYPE {INT, FLOAT, VEC3, STRING, BOOL, FOO};
std::unordered_map<std::string,std::pair<TYPE,std::string>> params;
由此,当实际使用我的&#34;值&#34;时,我需要根据switch
成员的.first
语句运行它,所以做类似的事情:
for(const auto& m : params)
{
auto key = m.first;
auto value = m.second;
auto type = value.first;
auto theActualValue = value.second;
switch(type)
{
case TYPE::INT:
applyAnIntSetting(key,std::stoi(theActualValue));
break;
case TYPE::STRING:
applyAStringSetting(key, theActualValue);
break;
case TYPE::VEC3:
vec3 val;
/* do some string splitting etc */
applyAVec3Setting(key,val);
break;
}
}
(这段代码只是为了说明我的观点)。
有更简单/更好的方法吗?我确定我错过了什么。