#include #include #include #include // remove #include #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::remove; } #endif #include #include ////////////////////////////////////////////////////////////////////////// template class base { friend class boost::serialization::access; public: T x; public: base() {} };//class base namespace boost { namespace serialization { //Serialize template inline void serialize(Archive& ar, base& obj, const unsigned int version) { std::cout<<"base: Serialize\n"; boost::serialization::split_free(ar, obj, version); } //Save Archive - base template inline void save(Archive& ar, const base& obj, const unsigned int version) { T temp = obj.x; ar << BOOST_SERIALIZATION_NVP(temp); std::cout<<"base: Save\n"; } template inline void load(Archive& ar, base& obj, const unsigned int version) { T temp; ar >> BOOST_SERIALIZATION_NVP(temp); std::cout<<"base: Load\n"; } };//namespace serialization };//namespace boost ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// template class derived : public base { public: T y; std::string mString; public: derived(): base() { mString = "derived serialized!!!"; } }; //class derived namespace boost { namespace serialization { template inline void serialize(Archive& ar, derived& obj, const unsigned int version) { boost::serialization::split_free(ar, obj, version); //ar << BOOST_SERIALIZATION_NVP(obj.y) << BOOST_SERIALIZATION_NVP(obj.mString); std::cout<<"derived::Serialize\n"; } template inline void save(Archive& ar, derived& obj, const unsigned int version) { std::cout<<"derived::Save - Before\n"; T tempX = obj.x; T tempY = obj.y; std::string tempStr = obj.mString; ar << boost::serialization::base_object>(obj); ar << BOOST_SERIALIZATION_NVP(tempY); ar << BOOST_SERIALIZATION_NVP(tempStr); std::cout<<"derived::Save - After\n"; } template inline void load(Archive& ar, derived& obj, const unsigned int version) { ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(obj) >>BOOST_SERIALIZATION_NVP(obj.y)>>BOOST_SERIALIZATION_NVP(obj.mString); std::cout<<"derived::Load\n"; } };//namespace serialization };//namespace boost ////////////////////////////////////////////////////////////////////////// int main(void) { derived originalObject; originalObject.x = 100; originalObject.y = 2000.23564; std::ostringstream ossx; boost::archive::xml_oarchive oa(ossx); oa<