1

该用例正在逐步执行用 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 内置的任何错误检查,并且似乎取消了随机访问密钥的所有简单性。

4

1 回答 1

2

如果您担心由于用户拼写错误而导致密钥不存在,您可以使用FindValue

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

如果您真的想在特定列表之外获取地图中的所有键,那么您必须在执行过程中进行迭代。

于 2012-10-31T22:06:21.117 回答