2

この 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
        }
    }

これは処理が非常に簡単なはずですが、私を夢中にさせています!

4

1 に答える 1