Boost logo

Boost Users :

From: Delfin Rojas (drojas_at_[hidden])
Date: 2005-05-03 16:42:55


In libs/serialization/test there is a test_list_ptrs.cpp that shows how to
serialize a list with pointers. Then, in libs/example there is a
demo_shared_ptr.cpp that shows how to serialize shared_ptrs. Hopefully you
can combine those and it should show how to serialize a list of shared_ptrs

Hope this helps,

-delfin

> -----Original Message-----
> From: boost-users-bounces_at_[hidden] [mailto:boost-users-
> bounces_at_[hidden]] On Behalf Of Jan Eickmann
> Sent: Tuesday, May 03, 2005 1:44 PM
> To: boost-users_at_[hidden]
> Subject: [Boost-users] Re: Serialization, shared_ptr and namespaces
>
> Hello,
>
> sorry to bump this but I still haven't found a solution or any
> information on how to use shared_ptr together with serialization.
>
> Anybody can shed some light on this?
>
> Thanks a lot,
>
> Jan Eickmann
>
> Jan Eickmann wrote:
> > Hi,
> >
> > I'm trying to serialize a list of shared_ptr's to objects.
> >
> > Here's a summary of the code I have:
> >
> > namespace MyNamespace
> > {
> >
> > class B
> > {
> > //implementation plus standard serialization function
> > };
> >
> > class A
> > {
> > private:
> > list< shared_ptr<B> > myBs;
> > public:
> > template<class Archive>
> > void serialize(Archive & ar, const unsigned int version)
> > {
> > ar & BOOST_SERIALIZATION_NVP(myBs);
> > }
> > };
> >
> > }
> >
> > If I just try to serialize it, I get an unregistered_class exception. So
> > I think I have to use BOOST_SHARED_POINTER_EXPORT(_GUID) to register the
> > shared_ptr.
> >
> > When I include this inside the namespace (please note that the error
> > messages are from my real code, so they have slightly other names:
> >
> > BOOST_SHARED_POINTER_EXPORT(B)
> >
> > I get this:
> > f:\xenocide\xenocide\src\common\simulation\simulation.h(108) : error
> > C2059: syntax error : 'string'
> > f:\xenocide\xenocide\src\common\simulation\simulation.h(108) : error
> > C2146: syntax error : missing ';' before identifier
> > 'BOOST_CLASS_EXPORT_GUID'
> > f:\xenocide\xenocide\src\common\simulation\simulation.h(108) : error
> > C2059: syntax error : 'string'
> > f:\xenocide\xenocide\src\common\simulation\simulation.h(109) : error
> > C2143: syntax error : missing ';' before '}'
> >
> > When I put it outside the namespace I have to use a fully qualified name
> > including the namespace for class B, so it becomes
> >
> > BOOST_SHARED_POINTER_EXPORT(MyNamespace::B)
> >
> > Then I get (not Xenocide is here what MyNamespace is in my example):
> > f:\xenocide\xenocide\src\common\simulation\simulation.h(115) : error
> > C2653: '__shared_ptr_Xenocide' : is not a class or namespace name
> > f:\xenocide\xenocide\src\common\simulation\simulation.h(115) : error
> > C2653: '__shared_ptr_Xenocide' : is not a class or namespace name
> >
> > I also tried various combinations with BOOST_SHARED_POINTER_EXPORT_GUID
> > but it didn't help.
> >
> > Can someone explain to me how I have to declare shared_ptr's in order
> > for them to work with boost::serialization? I was unable to find some
> > more indepth documentation.
> >
> > Thanks,
> >
> > Jan Eickmann
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users


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