【发布时间】:2010-07-23 07:01:47
【问题描述】:
我必须在我的程序中序列化libkdtree++,树结构简单描述如下:
struct _Node_base {
_Node_base * _M_parent, *_M_left, * _M_right;
template<Archive>
serialize(Archive &ar, const unsigned int version) {
ar & _M_left & _M_right;
}
}
template<typename V>
struct _Node : public _Node_base {
typedef V value_type;
value_type value;
template<Archive>
serialize(Archive &ar, const unsigned int version) {
ar.register_type(static_cast<_Node*>(NULL));
ar & boost::serialization::base_object<_Node_base>(*this);
ar & value;
}
}
struct Tree {
_Node * root;
template<Archive>
serialize(Archive &ar, const unsigned int version) {
ar & root;
}
}
此程序报告“流错误”。 但是从“serailized 文件”中,它缺少根的子节点的值字段。因此我认为 BaseNode 序列化 _M_left 和 _M_right 指针是可能的。但是由于_Node_base不知道_Node的值类型,所以看起来很难将“ar.register_type”添加到_Node_base.serialize()中。
【问题讨论】:
-
该代码无法编译。
Node应该是BaseNode的子类,left和right应该是 ptrs,value_type未声明,serialize缺少返回类型等。请发布一些真实的代码(编译)。
标签: c++ serialization tree boost-serialization