好吧,所以我已经解决了一个问题,即我有限的编程技巧根本无法解决,至少是以优雅的方式。我想存储来自Valve KeyValues files的数据,但我想不出一个好的方法来实现它。我将在这段代码中说明文件格式的基本结构。
"Key"
{
"Key"
{
"Key" "Value"
"Key" "Value"
}
"Key"
{
"Key" "Value"
"Key" "Value"
}
"Key" "Value"
"Key" "Value"
}
每个值可以是几种类型中的一种。每个键必须具有分配给它的特定类型的值。无论密钥本身位于何处,都要改变类型,但我对此表示怀疑。我实际上可以通过键,值和括号对文件进行标记,因此除非有必要,否则我不需要任何帮助。我想创建一个不快速和脏的系统,并依赖大量的重复代码。如果您有任何问题,请随时提出。
答案 0 :(得分:0)
一个简单的解决方案是使用std::map<std::string, boost::any>
容器。您需要使用boost::any。另一种解决方案是将键值对存储为std::map<std::string, std::string>
意义上的简单字符串,然后使用boost::lexical_cast进行转换。
答案 1 :(得分:0)
以下是我认为可以应用于此问题的解决方案:
我假设你可能会得到很多这样的积木 -
“键”
{
...
}
“键”
{
...
}
现在,构建一个森林,其树木以块的初始“Key”为根。密钥的子项将是子块中的密钥等等。叶子将包含“值”。
树将是n-ary,而不是二进制。级别中的“键”可以按从左到右的排序顺序存储,这将增强与查询的键对应的值的检索时间。
这样的存储将是我能想到的最优雅的方式之一。进一步的想法和建议表示赞赏。