
Thank you for the reply.
This works!!! , but it creates a temporary. I was thinking how to cast the
constness away, without making temporary object. I gess know at least I have
one possible solution, althgough not complete happy with it :)
On 12/19/09, Steven Watanabe
AMDG
elizabeta petreska wrote:
How to serialize shared_ptr member which points to const object. The following compiles, but is not working i.e the restored boost_shared_ptr does not point to anything. I tried to use const_pointer_cast to cast the const away. I suspect that this is the problematic part.
I think the question here is , how should I cast away the const correctly for boost::shared_ptr<const T>?
The problem is that you are creating a temporary when you do the cast. When you deserialize, the temporary is modified, instead of mac. The following seems to work.
#include
#include #include #include #include <fstream> #include class B { public: B() { } B(int a):ma(a) { }
int ma;
template<class Archive> void serialize(Archive & ar, const unsigned int /*version*/) { using boost::serialization::make_nvp; ar & make_nvp("ma",ma); } };
class BC { public: BC() { } BC(boost::shared_ptr<B>& t):mac(t) { }
boost::shared_ptr<const B> mac;
BOOST_SERIALIZATION_SPLIT_MEMBER()
template<class Archive> void save(Archive & ar, const unsigned int /*version*/) const { using boost::serialization::make_nvp; ar & make_nvp("mac", mac); } template<class Archive> void load(Archive & ar, const unsigned int /*version*/) { using boost::serialization::make_nvp; boost::shared_ptr<B> temp; ar & make_nvp("mac", test); mac = temp; } };
int main() { std::ofstream ofs(L"C:\\MyTest.xml"); std::ifstream ifs(L"C:\\MyTest.xml");
boost::shared_ptr<B> bb(new B(4));
BC aa(bb);
{ boost::archive::xml_oarchive oa(ofs); oa & BOOST_SERIALIZATION_NVP(aa); }
BC raa; { boost::archive::xml_iarchive ia(ifs); ia & BOOST_SERIALIZATION_NVP(raa); }
}
In Christ, Steven Watanabe
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users