|
Boost Users : |
From: at forum (at1forum_at_[hidden])
Date: 2008-02-06 07:18:34
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
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net