gpt4 book ai didi

c++ - 促进树的序列化?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:25:40 25 4
gpt4 key购买 nike

我有一个需要序列化的树类。代码:

#include <string>
#include <boost/serialization/vector.hpp>
#include <boost/serialization/string.hpp>
#include <boost/serialization/access.hpp>
#include <boost/serialization/tracking.hpp>
using namespace std;

class AVLtree {
public:
string name;
int fid;
int p1;
int n1;
double ig;

AVLtree *left; // left subtree
AVLtree *right; // right subtree
int height; // height of the tree
long TotalNodes;
};
BOOST_CLASS_TRACKING(AVLtree, track_always)
namespace boost {
namespace serialization {
template<class Archive>
void serialize(Archive &ar, AVLtree &tree, const unsigned int version) {
ar & tree.name;
ar & tree.fid;
ar & tree.p1;
ar & tree.n1;
ar & tree.ig;
ar & tree.height;
ar & tree.TotalNodes;
ar & *tree.left; // Haven't yet tried it with *tree.left, but just tree.left saves the memory address, not the object
ar & *tree.right;
} // end serialize()
} // end namespace serialization
} // end namespace boost

我已经在线查看了许多其他评论和代码示例,包括本网站和 Boost 文档,但我不知道如何处理像这样的递归情况。该类包含两个相同类型对象的指针。我应该如何修改树或序列化函数以使其工作?谢谢。

最佳答案

恕我直言,您应该tree.lefttree.right 序列化为指针,而不是对象。它们有时可以而且应该等于 NULL(否则你的树将是无限的)。

您的代码还需要一个适当的默认构造函数来将这些成员设置为 NULL。从您的代码中也不清楚谁拥有和销毁树木。我会考虑禁止复制构造函数(例如,从 boost::noncopyable 派生你的类)。

您不需要宏 BOOST_CLASS_TRACKING(AVLtree, track_always),Boost.Serialize 无论如何都会应用它,因为您会将(一些)AVLtree 序列化为指针。

那会很好用,Archive 是为处理“后向指针”而设计的;递归结构对它来说是小菜一碟。

祝你好运!

关于c++ - 促进树的序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19669617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com