
Hi I am testing boost serialization to integrate it in our software. Actually I am using mfc I want to save an object to an older version? I using the split method (save and load) and I don't find how to pass the version to the save function? "BOOST_SERIALIZATION_NVP(this)" is using the current object version. code : class CMyPoint { friend class boost::serialization::access; protected: int m_nX, m_nY; std::string m_sName; public: CMyPoint() { m_nX = 0; m_nY = 0; m_sName = ""; } CMyPoint(int nX, int nY, std::string sName = "") { m_nX = nX; m_nY = nY; m_sName = sName; } void SetX(int nX) { m_nX = nX; } void SetY(int nY) { m_nY = nY; } virtual void Assign(const CMyPoint &pt) { m_nX = pt.m_nX; m_nY = pt.m_nY; } CMyPoint& operator =(const CMyPoint &pt) { Assign(pt); return *this; } template<class Archive> void save(Archive & ar, const unsigned int version) const { ar & BOOST_SERIALIZATION_NVP(m_nX) & BOOST_SERIALIZATION_NVP(m_nY); if(2 <= version) ar & BOOST_SERIALIZATION_NVP(m_sName); } template<class Archive> void load(Archive & ar, const unsigned int version) { ar & BOOST_SERIALIZATION_NVP(m_nX) & BOOST_SERIALIZATION_NVP(m_nY); if(2 <= version) ar & BOOST_SERIALIZATION_NVP(m_sName); } BOOST_SERIALIZATION_SPLIT_MEMBER() void Save(const char * filename) { std::ofstream ofs(filename); assert(ofs.good()); boost::archive::xml_oarchive oa(ofs); oa << BOOST_SERIALIZATION_NVP(this); } void Load(const char * filename) { std::ifstream ifs(filename); assert(ifs.good()); boost::archive::xml_iarchive ia(ifs); ia >> BOOST_SERIALIZATION_NVP(this); } }; BOOST_CLASS_VERSION(CMyPoint, 2) BOOST_CLASS_EXPORT_GUID(CMyPoint, "CMyPoint") Thank you

Hi I am testing boost serialization to integrate it in our software. Actually I am using mfc I want to save an object to an older version? I using the split method (save and load) and I don't find how to pass the version to the save function? "BOOST_SERIALIZATION_NVP(this)" is using the current object version. code : class CMyPoint { friend class boost::serialization::access; protected: int m_nX, m_nY; std::string m_sName; public: CMyPoint() { m_nX = 0; m_nY = 0; m_sName = ""; } CMyPoint(int nX, int nY, std::string sName = "") { m_nX = nX; m_nY = nY; m_sName = sName; } void SetX(int nX) { m_nX = nX; } void SetY(int nY) { m_nY = nY; } virtual void Assign(const CMyPoint &pt) { m_nX = pt.m_nX; m_nY = pt.m_nY; } CMyPoint& operator =(const CMyPoint &pt) { Assign(pt); return *this; } template<class Archive> void save(Archive & ar, const unsigned int version) const { ar & BOOST_SERIALIZATION_NVP(m_nX) & BOOST_SERIALIZATION_NVP(m_nY); if(2 <= version) ar & BOOST_SERIALIZATION_NVP(m_sName); } template<class Archive> void load(Archive & ar, const unsigned int version) { ar & BOOST_SERIALIZATION_NVP(m_nX) & BOOST_SERIALIZATION_NVP(m_nY); if(2 <= version) ar & BOOST_SERIALIZATION_NVP(m_sName); } BOOST_SERIALIZATION_SPLIT_MEMBER() void Save(const char * filename) { std::ofstream ofs(filename); assert(ofs.good()); boost::archive::xml_oarchive oa(ofs); oa << BOOST_SERIALIZATION_NVP(this); } void Load(const char * filename) { std::ifstream ifs(filename); assert(ifs.good()); boost::archive::xml_iarchive ia(ifs); ia >> BOOST_SERIALIZATION_NVP(this); } }; BOOST_CLASS_VERSION(CMyPoint, 2) BOOST_CLASS_EXPORT_GUID(CMyPoint, "CMyPoint") Thank you
participants (1)
-
at forum