Boost logo

Boost Users :

Subject: [Boost-users] [serialization] customizing save/load for a type (pointer)
From: Mathieu Champlon (m.champlon_at_[hidden])
Date: 2013-10-17 01:28:27


I'm using Boost.Serialization on a project where part of the data is not
serialized and then loaded separately when unserializing.
For instance a class MyThing can have a member data MyThingData* which
described some "static" data.
There is an application which edits these data and saves them on file
for the main application to use latter on.

When serializing MyThing we customize save/load in order to serialize
MyThingData as a UID (MyThingData has a GetId member function).
Upon unserialization the proper MyThingData instance is searched for
based on the UID read from the archive.

This works OK but is a bit tedious because with

     class MyThing
         MyThingData* data_;

instead of simply doing

     template< typename Archive > void serialize( Archive& ar, const
unsigned int )
         ar & data_;

we have to do something like

     template< typename Archive > void load( Archive& ar, const unsigned
int )
         int id;
         ar >> id;
         data_ = FindData( id ); // not very important how it is
actually retrieved
     template< typename Archive > void save( Archive& ar, const unsigned
int ) const
         ar << data_->GetId();

Moreover things get even more complicated when serializing for instance
a std::vector< MyThingData* > ...

So I'm looking for a way to customize the serialization of MyThingData*.
Of course I could wrap MyThingData* in a simple object to encapsulate
save/load but they're everywhere and the code base is quite massive so
this would require a lot of changes.

Any idea how I could achieve this ?

Thank you !


Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at