我使用了很多 boost::property_tree::ptree
,但是发现我创建,传递和保存副本的次数过多。对于较大的ptree
对象,这很昂贵。
Boost提供了swap函数,但没有move构造函数。他们为什么要那样做?
我当前的解决方案是扩展ptree并自己做一个:
class MyPtree : public boost::property_tree::ptree
{
MyPtree(MyPtree&& other)
{
swap(other);
}
... plus adding the other constructors and operators
};
这是最好的解决方案还是我错过了什么?
最佳答案
我认为您的解决方案相当不错。请注意,它永远不会影响内部树的操作,因为树会将其子级视为ptree
,而不是MyPtree
。
稍微好一点的是提出新功能并将其推荐给图书馆开发人员。
相关的是Is there a convenient way to erase a node from a property tree, preserving its child nodes?。
如果您想更深入地研究,您会发现属性树建立在Boost MultiIndex之上,由于各种原因,Boost MultiIndex似乎不允许从值移动:Move element from boost multi_index array
您可以在使用的各种索引的列表形式上添加splice()
操作: