|
Boost Users : |
From: Jarl Lindrud (jlindrud_at_[hidden])
Date: 2005-01-11 11:05:07
Hi! A question on serializing pointers to derived classes:
When I serialize naked polymorphic pointers through base pointers, things
work as expected, ie the derived classes are serailized and deserialized.
However, when I replace the naked pointers with corresponding
boost::shared_ptr's, I get an archive_exception, to the tune of
"unregistered class".
I'm using BOOST_CLASS_EXPORT, and not the register_type<> functions.
Is this supposed to happen, or do I need some additional type registration
beyond what was necessary for serializing naked pointers?
Thanks!
Jarl.
The code:
//B and C derive from A
std::ostringstream os;
boost::archive::text_oarchive oa(os);
//A *pb0 = new B(15,16);
//A *pc0 = new C(17, 18, 19);
boost::shared_ptr<A> pb0( new B(15,16) );
boost::shared_ptr<A> pc0( new C(17, 18, 19) );
oa << pb0;
oa << pc0;
std::string data = os.str();
{
std::istringstream is(data);
boost::archive::text_iarchive ia(is);
//A *pa1 = NULL;
//A *pa2 = NULL;
boost::shared_ptr<A> pa1;
boost::shared_ptr<A> pa2;
ia >> pa1;
ia >> pa2;
B* pb = dynamic_cast<B *>(pa1.get());
C* pc = dynamic_cast<C *>(pa2.get());
}
_________________________________________________________________
Express yourself instantly with MSN Messenger! Download today it's FREE!
http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/
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