如何在C ++中存储不同类型的键/值对

时间:2015-04-22 08:02:43

标签: c++

我有一个系统,会有一些配置文件,我希望能够指定一些设置,例如:

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;
    }
}

(这段代码只是为了说明我的观点)。

有更简单/更好的方法吗?我确定我错过了什么。

0 个答案:

没有答案