同様の問題を理解しようとしてここに着陸しました。解決するのに時間がかかったので、この投稿が他の人の役に立てば幸いです。
私にとって、問題を解決する鍵は、ptree が boost::property_tree::ptree::value_type のコレクションであることを思い出すことでした。したがって、問題は「ある ptree から別の ptree に 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 typedef がないため、back_inserter イテレーターで std::copy を使用することはできません。しかし、バインドされた関数で 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));
親が XML として出力される場合、以下が含まれます。
<Value1>1</Value1>
<Value2>2</Value2>