Boost logo

Boost Users :

From: Robert Ramey (ramey_at_[hidden])
Date: 2007-03-31 20:37:41


Ruediger Berlich wrote:
> Dear all,
>
> I'd like to serialize a number of classes using the free-standing
> version of the serialize function. As I do not want to access
> internals of the classes directly, I have to work with set/get
> functions, which in turn implies having to write load/save functions.
>
> This seems to work for simple types, like in the following example.
> But will it circumvent any internal mechanisms of Boost.Serialization
> , if I do not give the library direct access to class data ? Will
> this work for complex types, e.g. vectors of shared_ptr objects ?

yes

The only problem will be with "secret" objects which are pointed to.

When you de-serialize them to the stack, the internal address is wrong
so after moving them using "get" you'll have to use "reset_object_address"
if they are trackable.

Robert Ramey

>
> /*************************************************************************/
>
> class base{
> public:
> base(void){
> setSecret(1);
> }
> base(int val){
> setSecret(val);
> }
> virtual ~base(){ /* nothing */ }
>
> virtual int getSecret(void) const{
> return secret;
> }
>
> virtual void printInfo(void) = 0;
>
> void setSecret(int val){
> secret = val;
> }
>
> private:
> int secret;
> };
>
> BOOST_IS_ABSTRACT(base);
>
> namespace boost {
> namespace serialization {
> template<class Archive>
> void save(Archive & ar, const base & t,
> unsigned int version)
> {
> int secret = t.getSecret();
> ar & make_nvp("secret", secret);
> }
>
> template<class Archive>
> void load(Archive & ar, base & t, unsigned int version)
> {
> int secret;
> ar & make_nvp("secret", secret);
> t.setSecret(secret);
> }
>
> template<class Archive>
> inline void serialize(Archive & ar, base & t;
> const unsigned int version)
> {
> split_free(ar, t, version);
> }
> }
> }
>
> /*************************************************************************/
>
> Thanks and have a good day,
> Ruediger


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