我使用了很多 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()操作:

09-07 08:26