我必须在我的程序中序列化 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()。