Мне нужно сериализовать 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;
}
}
Эта программа сообщает об "ошибке потока". Но из «файла serailzed» отсутствуют поля значений для дочерних узлов корней. Таким образом, я думаю, возможно, что BaseNode сериализовал указатели _M_left и _M_right. Однако, поскольку _Node_base не имеет понятия о типе значения _Node, поэтому сложно добавить «ar.register_type» в _Node_base.serialize().