Я приземлился здесь, пытаясь выяснить аналогичную проблему. Мне потребовалось время, чтобы решить ее, так что, надеюсь, этот пост поможет другим.
Для меня ключом к решению проблемы было помнить, что ptree - это коллекция boost :: property_tree :: ptree :: value_type. Таким образом, проблема сводится к тому, «как я могу добавить value_types из одного дерева в другое».
Ptree предоставляет несколько методов для вставки value_type:
iterator push_front(const value_type &);
iterator push_back(const value_type &);
iterator insert(iterator, const value_type &);
У Ptree нет определения типа const_reference, поэтому мы не можем использовать std :: copy с итератором back_inserter. Но мы можем использовать std :: for_each со связанной функцией.
#include <algorithm>
#include <functional>
#include <boost/property_tree/ptree.hpp>
using namespace std;
using namespace boost::property_tree;
...
ptree child;
child.put("Value1", 1);
child.put("Value2", 2);
ptree parent;
std::for_each(child.begin(),
child.end(),
std::bind(&ptree::push_back, &parent, placeholders::_1));
Теперь, если parent выведен как XML, он будет содержать:
<Value1>1</Value1>
<Value2>2</Value2>