Boost logo

Boost Users :

Subject: Re: [Boost-users] [serialization] deriving from xml_iarchive
From: Kenny Riddile (kfriddile_at_[hidden])
Date: 2009-04-16 15:40:37


I've almost got it working, but now I'm getting some linker errors you
might be able to help with. Here's my InputArchive class now:

     http://pastebin.com/m6d9ce587

GetRepository() and InitializeRepository() are defined in the cpp to
avoid cyclical includes elsewhere. InputArchive is part of one of our
static libs but we're currently linking against boost serialization
dynamically. Here are my linker errors:

     http://pastebin.com/m72460420

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?


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