$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [Boost-users] [serialization] deriving from xml_iarchive
From: Kenny Riddile (kfriddile_at_[hidden])
Date: 2009-04-16 15:53:57
Same linker errors using a helper class too:
Robert Ramey wrote:
> 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?