#include #include #include #include #include #include #include using namespace std; class B { public: B() : i(10) {} virtual ~B() {} template void serialize(Archive& ar, unsigned version) { ar & i; } int i; }; class D : public B { public: template void serialize(Archive& ar, unsigned version) { ar & boost::serialization::base_object(*this); } }; BOOST_CLASS_EXPORT(D); int main(int,char**) { ofstream ofs("xxx"); boost::archive::text_oarchive oa(ofs); D* b = new D; oa << b; ofs.close(); ifstream ifs("xxx"); boost::archive::text_iarchive ia(ifs); B* rb; ia >> rb; std::cout << typeid(*rb).name() << "\n"; assert(dynamic_cast(rb)); return 0; }