Ищу рабочий пример сериализации полиморфных структур с помощью буста.
Данный код не работает: сериализуется только базовый класс. Где ошибка?
#include <string>
#include <fstream>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/serialization/nvp.hpp>
#include <boost/serialization/serialization.hpp>
#include <boost/serialization/export.hpp>
struct base {
int x;
template<class Archive>
inline void serialize(
Archive & ar,const unsigned int file_version
){
ar & BOOST_SERIALIZATION_NVP(x);
}
};
BOOST_SERIALIZATION_ASSUME_ABSTRACT(base)
struct derived_one : public base {
std::string y;
template<class Archive>
inline void serialize(
Archive & ar, const unsigned int file_version
){
ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(base);
// boost::serialization::void_cast_register(
// static_cast<derived_one *>(NULL),
// static_cast<base *>(NULL)
// );
ar & BOOST_SERIALIZATION_NVP(y);
}
};
BOOST_CLASS_EXPORT(base);
struct derived_two : public base {
std::string z;
derived_two():
z("two")
{
}
template<class Archive>
inline void serialize(
Archive & ar, const unsigned int file_version
){
// boost::serialization::void_cast_register(
// static_cast<derived_two *>(NULL),
// static_cast<base *>(NULL)
// );
// boost::serialization::base_object<base>(*this);
ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(base);
ar & BOOST_SERIALIZATION_NVP(z);
}
};
BOOST_CLASS_EXPORT(derived_one);
BOOST_CLASS_EXPORT(derived_two);
int main()
{
std::ofstream of("test.xml");
boost::archive::xml_oarchive archive(of);
archive.register_type<derived_two>();
base* b = new derived_two();
archive << BOOST_SERIALIZATION_NVP(b);
}