Boost logo

Boost Users :

Subject: Re: [Boost-users] [serialization] deriving from xml_iarchive
From: Robert Ramey (ramey_at_[hidden])
Date: 2009-04-16 14:52:30


I think the best way to handle this is by making an archive helper.

If you look into the implemenation of ..._oarchive, you'll see that
it looks something like the following:

class xml_oarchive : public naked_xml_oarchive, shared_ptr_helper {...

This is to implement special facility for shared_ptr which would
otherwise not be serializable. (note: this is the only case where
the archive classes address issues related to the implemenation
of a particular type).

You could do something similar for your own "special" type.

Look in the documentaion under "case studies" for a
more complete explanation.

Robert Ramey

Kenny Riddile wrote:
> I have a situation where I want an additional piece of data to be
> owned by the archive type we're using. Previously, I had this
> typedef that's used throughout our code:
>
> typedef boost::archive::xml_iarchive IutputArchive;
>
> I changed it to something like this:
>
> class InputArchive : public boost::archive::xml_iarchive
> {
> public:
> InputArchive( std::istream& is, Foo bar )
> : boost::archive::xml_iarchive( is )
> , m_bar( bar )
>
> Foo GetFoo() const
> {
> return m_bar;
> }
>
> private:
> Foo m_bar;
> };
>
> The problem I'm seeing is that whenever a serializable class's
> serialize() method is invoked via an InputArchive object, the template
> parameter to serialize() is instantiated with
> boost::archive::xml_iarchive, not InputArchive, which I need. Is it
> possible to get the behavior I want through public derivation like
> this, or is there a better way?


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