Boost logo

Boost Users :

Subject: Re: [Boost-users] [serialization] deriving from xml_iarchive
From: Kenny Riddile (kfriddile_at_[hidden])
Date: 2009-04-17 18:52:46


I'm still stuck on this. Here is my current code:

     http://pastebin.com/m24bcbe39

and here are the errors:

     http://pastebin.com/m6394ed72

Also, I think there's a small typo or bug around line 53 of:

http://www.boost.org/doc/libs/1_38_0/libs/serialization/example/portable_binary_iarchive.hpp

It doesn't assign the value of boost::archive::archive_exception::what()
to msg, unless that line is cruft and the text "programmer error" is
desired in the default case...

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