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?