Прежде всего я скажу, что я думаю, что понял, как это должно быть сделано, но мой код не будет компилироваться, как бы я ни пытался.Я основал свое предположение на этом официальном примере пустого трюка с деревом .Там вы можете найти следующую строку:
const ptree &settings = pt.get_child("settings", empty_ptree<ptree>());
, которая показывает, что можно (или должно быть) получить поддерево из дерева.
Так что я предположил, что мы можем перебрать что-то через дерево с чем-токак BOOST_FOREACH
таким образом:
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»
Итак, что мне делать: как перебрать Boost Ptree и получить sub Ptrees?
Обновление: Я также пробовал такой код
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 - теперь я получаю правильные результаты с этим кодом.