#include #include #include #include #include #include #include #include #include struct A { public: A() {} virtual ~A() {} template void serialize(Archive &ar, unsigned int version) { ar & BOOST_SERIALIZATION_NVP(i); } int i; }; BOOST_CLASS_EXPORT(A); struct B : A { template void serialize(Archive &ar, unsigned int version) { ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(A); ar & BOOST_SERIALIZATION_NVP(f); } float f; }; BOOST_CLASS_EXPORT(B); BOOST_AUTO_TEST_SUITE(example_boost_class_export) BOOST_AUTO_TEST_CASE(plain_boost_class_export) { boost::shared_ptr b = boost::make_shared(); b->f = 1.0; b->i = 3; boost::shared_ptr a = b; std::ofstream ofs("demo.xml"); { boost::archive::xml_oarchive oa(ofs); oa << BOOST_SERIALIZATION_NVP(a); } ofs.close(); boost::shared_ptr p; std::ifstream ifs("demo.xml"); { boost::archive::xml_iarchive ia(ifs); ia >> BOOST_SERIALIZATION_NVP(p); } ifs.close(); boost::shared_ptr bp = boost::dynamic_pointer_cast(p); BOOST_REQUIRE(bp); } BOOST_AUTO_TEST_SUITE_END()