Boost logo

Boost Users :

Subject: Re: [Boost-users] boost::serialization - Non intrusive serialization of user-defined members?
From: Robert Ramey (ramey_at_[hidden])
Date: 2018-03-05 15:51:30


On 3/5/18 5:12 AM, Lars Ruoff via Boost-users wrote:
> Hi,
> I have a class structure like
>
> class MemberClass;
>
> class ContainerClass {
>   MemberClass special_member;
>   int other_members;
> };
>
> Following the example in
> http://www.boost.org/doc/libs/1_66_0/libs/serialization/doc/
> i want to write a non-intrusive serialization:
>
> template<class Archive>
> void serialize(Archive & ar, ContainerClass & c, const unsigned int version)
> {
>   ar & c.other_members; // easy - built-in type
>   serialize(ar, c.special_member, version);  //use same version???
> }
>
> Assuming there's is also a non-intrusive
> void serialize(Archive & ar, MemberClass & m, const unsigned int version);
>
> this compiles and works but i feel this is not the way to do it because
> it reuses the version number of the container class for the member
> class? So how to handle that? Must the Container class manage version of
> its members individually?
> I suggest to add a section "Non-intrusively Serializable Members" to
> documentation with an example.
>
> Cheers,
> Lars R.

I'm not sure what the "special member" of the container class is.
Presumably it's your own class as STL classes have no "special members".
  Assuming this to be the case there should be something like:

struct ContainerClass {
        ...
        void serialize(Achive &ar, const unsigned int v){
                ar & other_members;
                ar & special_member
        }
        ...
};

or

template<class Archive>
void serialize(Archive & ar, ContainerClass & c, const unsigned int version)
{
        ar & c.other_members; // easy - built-in type
        ar & c.special_member;
}


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