- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个需要序列化的树类。代码:
#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.left
和tree.right
序列化为指针,而不是对象。它们有时可以而且应该等于 NULL(否则你的树将是无限的)。
您的代码还需要一个适当的默认构造函数来将这些成员设置为 NULL。从您的代码中也不清楚谁拥有和销毁树木。我会考虑禁止复制构造函数(例如,从 boost::noncopyable 派生你的类)。
您不需要宏 BOOST_CLASS_TRACKING(AVLtree, track_always)
,Boost.Serialize 无论如何都会应用它,因为您会将(一些)AVLtree 序列化为指针。
那会很好用,Archive 是为处理“后向指针”而设计的;递归结构对它来说是小菜一碟。
祝你好运!
关于c++ - 促进树的序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19669617/
Boost Hana 似乎没有记录库的这一方面,所以我想知道我所做的至少是否合法。 我已经开始在我的代码中添加一堆概念,我不得不使用一些 hana 概念。有一个例子: #include namesp
这个问题在这里已经有了答案: Exception handling in Boost.Asio (1 个回答) 关闭 6 年前。 我注意到在许多 Boost ASIO 示例中,正在调用可能引发错误的
我刚开始使用 Boost ASIO 库,版本 1.52.0。我正在使用带有异步套接字的 TCP/SSL 加密。从此处询问的有关 ASIO 的其他问题来看,ASIO 似乎不支持接收可变长度消息,然后将该
谁能解释我如何才能成功地让我的进程进行通信?我发现 IPC 上的 perldoc 令人困惑。 我目前拥有的是: $| = 1; $SIG{CHLD} = {wait}; my $parentPid =
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 9 年前。 Improve t
我在页面上显示搜索结果列表。在最底部,我想放置一个“加载更多”链接,将更多结果附加到页面上的现有结果,并将“加载更多”链接的参数更改为下一页,这样如果用户单击它,下一页将附加到这一页。在加载结果时显示
我是一名优秀的程序员,十分优秀!