
David Tonge wrote:
I had been including the BOOST_CLASS_EXPORT(T) commands in the headers but that means I have to include all of the archive headers, and export.hpp in every header, and that makes for slow compilations. My hope is that I can include all of those only in the implementation .cpp and put the BOOST_CLASS_EXPORT(T) there. I was also worried that if I included the BOOST_CLASS_EXPORT(T) in the header then every other .cpp which included that header would also try to register the guid for T - surely an unnecessary replication of effort.
I actually though that we should have "polymorphic archive" -- one whose operations are virtual. It would have a number of derived class which wrap existing archives in a polymorphic interface. In code: class polymorphic_archive { } : template<class Wrapped> class polymorphic_archive_wrapper { /// Forward everything to m_wrapper Wrapper& m_wrapper; }; The serialization of exported class would work like: 1. BOOST_CLASS_EXPORT registers the class with all #included archives *and* with the polymorphic archive. 2. When saving, if class was registered with the used archive types, everything works as now. Otherwise, a wrapper over archive is created and used for saving polymorphic_archive_wrapper<ActualArchiveType> w(actual_archive); w << object; This way, you don't need to #include archive headers before calling BOOST_CLASS_EXPORT at all -- everything will work. It would only be needed if you want extra efficiency. Howver, I suspect BOOST_CLASS_EXPORT has some overhead already, so this might not be an issue. The problem, now, is to have somebody implement polymorphic archive ;-)
If this is the case then it's going to be quite inconvenient. It would mean one would have to BOOST_CLASS_EXPORT every class in every DLL where an instance of it (or a shared_pointer which might contain it) might be saved. If that were the case then I'd advocate making boost_serialization into a DLL, rather than a static library.
Maybe, you could try tweaking the Jamfile so that library is build as dynamic and try your test? - Volodya