|
Boost Users : |
Subject: [Boost-users] [Serialization] shared_ptr to const object
From: elizabeta petreska (elizabeta.petreska_at_[hidden])
Date: 2009-12-17 06:07:55
Hello
I am using boost 1.38.0
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>?
#include <boost/archive/xml_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/serialization/nvp.hpp>
#include <boost/serialization/utility.hpp>
#include <fstream>
#include <boost/serialization/shared_ptr.hpp>
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;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
using boost::serialization::make_nvp;
ar & make_nvp("mac", boost::const_pointer_cast<B> (mac));
}
};
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::text_oarchive oa(ofs);
oa & BOOST_SERIALIZATION_NVP(aa);
}
BC raa;
{
boost::archive::text_iarchive ia(ifs);
ia & BOOST_SERIALIZATION_NVP(raa);
}
}
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