#include #include #include #include #include #include #include #include struct A { virtual ~A() {} virtual void foo() {} friend class boost::serialization::access; template void serialize(Archive &/*ar*/, const unsigned int /*version*/) { } }; struct B : virtual A { friend class boost::serialization::access; template void serialize(Archive &ar, const unsigned int /*version*/) { ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(A); } }; struct C : B { virtual void foo() { std::cout << "C" << std::endl; } friend class boost::serialization::access; template void serialize(Archive &ar, const unsigned int /*version*/) { ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(B); } }; BOOST_CLASS_EXPORT(C) int main() { { std::ofstream ofs("outtarget.xml"); boost::archive::xml_oarchive oa(ofs); assert(ofs); A* pA = new C; oa << boost::serialization::make_nvp("A", pA); } { std::ifstream ifs("outtarget.xml"); assert(ifs); boost::archive::xml_iarchive ia(ifs); A* pA; ia >> boost::serialization::make_nvp("A", pA); pA->foo(); } }