まず第一に、私はそれがどのように行われるべきかを理解したと思いますが、私のコードは私が試した方法でコンパイルされません。私は、空のptreeトリックのこの公式の例に基づいて仮定しました。そこに次の行があります:
const ptree &settings = pt.get_child("settings", empty_ptree<ptree>());
これは、ptreeからsubptreeを取得することが可能である(または可能である必要がある)ことを示しています。
BOOST_FOREACH
したがって、次のような方法でptreeを反復処理できると想定しました。
BOOST_FOREACH(const boost::property_tree::ptree &v,
config.get_child("servecies"))
{
}
しかし、次のエラーが発生します。
エラー1エラーC2440:'初期化中':'std :: pair <_Ty1、_Ty2>'から'const boost :: property_tree :: ptree&'に変換できません
または私がしようとすると
BOOST_FOREACH(boost::property_tree::ptree &v,
config.get_child("servecies", boost::property_tree::empty_ptree<boost::property_tree::ptree>()))
{
}
私は得る:
エラー1エラーC2039:'empty_ptree':は'boost::property_tree'のメンバーではありません
では、どうすればよいでしょうか。BoostPtreeを反復処理して、サブPtreeを取得する方法を教えてください。
更新: 私もそのようなコードを試しました
BOOST_FOREACH(boost::property_tree::ptree::value_type &v,
config.get_child("path.to.array_of_objects"))
{
std::cout << "First data: " << v.first.data() << std::endl;
boost::property_tree::ptree subtree = (boost::property_tree::ptree) v.second ;
BOOST_FOREACH(boost::property_tree::ptree::value_type &vs,
subtree)
{
std::cout << "Sub data: " << vs.first.data() << std::endl;
}
}
これはコンパイルされ、例外をスローしませんが、何も出力しませんSub data
。このサイクルを維持するだけです。
アップデート2:
うーん...おそらく私のxmlで何かがうまくいかなかった-今私はそのコードで正しい結果を得る。