2016-09-21 8 views
0

次のconfig.yamlファイルを解析しようとしています。yams-cpp値の代わりにマップを返すネストされたシーケンス

config.yaml

foo: 
    bar: 
    baz: [1, 2, 3, 4] 
    bam: "some_string_value" 

test.cpp

YAML::Node configObj = YAML::LoadFile("cfig.yaml"); // loads file just fine 

YAML::Node fooObj = configObj["foo"]; // this Node object is a Map 

// iterate over foo node to get bar node 
for(auto it = fooObj.begin(); it != fooObj.end(); ++it){ 
    YAML::Node barMap = it->second; // this Node object is a Map 

    // iterate over bar node to get bad node 
    for(auto i = barMap.begin(); i != barMap.end(); ++i){ 
     YAML::Node bazMap = i->second; // this node is a sequence 

     for(std::size_t i=0; i<bazMap.size(); i++   
      auto index = bazMap[i].as<int>(); // <<< This is the problem 
     } 
    } 
} 

限り私が見ることができるような問題は、私は、インデックスは、私が最初のループ1であることを期待していint型が、bazMap[i].as<int>()であることを期待していますということです2秒、等。私が代わりに得ているのはbazMap[i].as<int>()です。タイプマップです。ここで私の理解に欠けているものは何ですか?

おかげで、

ブルース

更新答えは、私がループに早く私のネストされた中に停止したことでした。

+1

これを解決しましたか?もしそうなら、あなたは実際に以下の答えを書いて、それを「受け入れ」とマークすることができます。 –

+0

申し訳ありません、私は休暇中でした。私はやりました。ありがとう! – CompSciGuy139

答えて

0

私が見つけた答えは、私が何を得ているのか不明であったことにあります。

config.yamlファイルでは、私は期待していた次

foo.Type() == Map 
bar.Type() == Sequence 
baz.Type() == Sequence 

が、私が取得した:私はこの問題を解決するためにしなければならなかったすべての設定ファイルを変更する

foo.Type() == Map 
bar.Type() == Map 
baz.Type() == Sequence 

だったが。

foo: 
    bar: 
    - baz: [1, 2, 3, 4] 
    - bam: "some_string_value" 

次に、私が予想した通りに正確に解析しました。

この問題は、設定ファイルの形式であり、解析ロジックではありませんでした。

関連する問題