この API のマップとシーケンスの処理に根本的な問題があります。次の構造があるとします。
foo_map["f1"] = "one";
foo_map["f2"] = "two";
bar_map["b1"] = "one";
bar_map["b2"] = "two";
これを次の YAML ファイルに変換したい:
Node:
- Foo:
f1 : one
f2 : two
- Bar:
b1 : one
b2 : two
私は次のようにしてそうします:
node.push_back("Foo");
node["Foo"]["b1"] = "one";
...
node.push_back("Bar");
ただし、最後の行でノードがシーケンスからマップに変換され、例外が発生します。これを行う唯一の方法は、マップのマップを出力することです。
Node:
Foo:
f1 : one
f2 : two
Bar:
b1 : one
b2 : two
これに関する問題は、そのようなファイルを読み戻せない場合です。ノードを反復処理すると、例外を取得せずにノード イテレータの型を取得することさえできません。
YAML::Node::const_iterator n_it = node.begin();
for (; n_it != config.end(); n_it++) {
if (n_it->Type() == YAML::NodeType::Scalar) {
// throws exception
}
}
これは処理が非常に簡単なはずですが、私を夢中にさせています!