Boost logo

Boost Users :

Subject: [Boost-users] Boost.Serialization: Restoring object state (prevent creation of a new object)?
From: ray_at_[hidden]
Date: 2010-08-30 05:15:25


If an object is serialized (saved) from a pointer, the loading part automatically creates (instantiates) a new object. However, there are situations when the object is already created and all we need is to restore its state. The following code demonstrates one possible - although not elegant - solution using a temporary object:#include <fstream> #include <iostream> #include <boost/archive/xml_iarchive.hpp> #include <boost/archive/xml_oarchive.hpp> #include <boost/serialization/string.hpp> #include <boost/serialization/export.hpp> class A { public: A() : m_val(100) { } int m_val; private: friend class boost::serialization::access; template <typename Archive> void serialize(Archive &ar, const unsigned int version) { ar & BOOST_SERIALIZATION_NVP(m_val); } }; int main(int argc, char* argv[]) { A *a = new A(); // Save the object { std::ofstream os("d:/test.xml"); boost::archive::xml_oarchive oa(os); // Save from pointer oa & BOOST_SERIALIZATION_NVP(a); } // Change the object state a->m_val = 200; // Restore the state { std::ifstream is("d:/test.xml"); boost::archive::xml_iarchive ia(is); A* aTemp; ia & BOOST_SERIALIZATION_NVP(aTemp); a->m_val = aTemp->m_val; // Copy object state assert(a->m_val == 100); delete aTemp; } } Here is my question: Is there some more convenient way to restore the object state? In other words, is it possible to prevent creation of a new object and just 'populate' an existing object?



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