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 に答える