使用YAML-cpp,如何识别未知密钥?

时间:2012-10-31 21:57:16

标签: yaml-cpp

用例是逐步执行用YAML编写的配置文件。我需要检查每个密钥并相应地解析其值。我喜欢使用像doc["key"] >> value这样的随机访问方法的想法,但我真正需要做的是警告用户配置文件中无法识别的密钥,以防它们(例如,拼写错误的密钥)。如果不迭代文件,我不知道该怎么做。

我知道我可以使用YAML::Iterator执行此操作,就像这样

for (YAML::Iterator it=doc.begin(); it<doc.end(); ++it) 
{ 
   std::string key;
   it.first() >> key;
   if (key=="parameter") { /* do stuff, possibly iterating over nested keys */ }
   } else if (/* */) {
   } else {
       std::cerr << "Warning: bad parameter" << std::endl;
   }
}

但有更简单的方法吗?我的方式似乎完全绕过了YAML-cpp内置的任何错误检查,它似乎撤消了随机访问密钥的所有简单性。

1 个答案:

答案 0 :(得分:2)

如果您担心某个密钥不在,因为用户拼写错误,您可以使用FindValue

if(const YAML::Node *pNode = doc.FindValue("parameter")) {
   // do something
} else {
   std::cerr << "Parameter missing\n";
}

如果您真的希望将地图中的所有密钥都放在特定列表之外,那么您将不得不进行迭代。