3

「abc」など、データを取得するノードへのパスを表す文字列から始めます。現在、ノード階層を横断してそのノードに到達するために使用しているコードは、次のようになります (コンパイルできない可能性がありますが、アイデアはわかります)。

string keyPath("a.b.c");
vector<string> keyPieces(split(keyPath, "."));

const YAML::Node *currNode = &rootNode;
for_each(begin(keyPieces), end(keyPieces), [&](const string &key)
{
    // for simplicity, ignore indexing on a possible scalar node
    // and using a string index on a sequence node
    if ((*currNode)[key])
    {
        currNode = &((*currNode)[key]);
    }
});

// assuming a valid path, currNode should be pointing at the node
// described in the path (i.e. currNode is pointing at the "c" node)

上記のコードは正しく動作しているように見えますが、ノードの横断割り当てを行うためのより良い方法があるかどうか疑問に思っています。currNode = currNode[key]( ) のポインター/アドレスの代わりに直接ノード割り当て ( ) を使用するcurrNode = &((*currNode)[key])と、あるノードから次のノードに移動するのではなく、ノード間の参照が作成されるようです。

これを達成するための「よりクリーンな」またはより慣用的な方法はありますか?

4

2 に答える 2

1

今はそれを行う方法はありません (これは私が思いもよらなかった使用例です) が、良い考えです。バグを報告しました ( http://code.google.com/p/yaml-cpp/issues/detail?id=189 )。

于 2013-01-31T18:45:30.617 に答える