BOOST_CLASS_EXPORT_GUID with custom archive
Hi
I am using boost 1.49. I have custom archives derived from the boost binary
archives. However it seems that when using BOOST_CLASS_EXPORT_GUID the types
are not actually registered for the custom archive types, and I am getting
unregistered_class exception when serializing derived class from base
pointer. If I am using the boost binary original archives this is not the
case. My custom archive classes are defined in in its own header file and at
the end of the file I am including BOOST_SERIALIZATION_REGISTER_ARCHIVE,
according to this in the documentation :
"
The newly created archive will usually be stored in its own header module.
All that is necessary is to include the header and construct an instance of
the new archive. EXCEPT for one special case.
Instances of a derived class are serialized through a base class pointer.
Such instances are not "registered" neither implicitly nor explicitly. That
is, the macro BOOT_CLASS_EXPORT is used to instantiate the serialization
code for the included archives.
To make this work, the following should be included after the archive class
definition.
#define BOOST_SERIALIZATION_REGISTER_ARCHIVE(Archive)
Failure to do this will not inhibit the program from compiling, linking and
executing properly - except in one case. If an instance of a derived class
is serialized through a pointer to its base class, the program will throw an
unregistered_class exception."
here is my archive h file :
-------------------
customarchive.h
--------------------
#include
Elizabeta wrote
Hi I am using boost 1.49. I have custom archives derived from the boost binary archives. <snip> ... BOOST_SERIALIZATION_REGISTER_ARCHIVE(CloneBinaryIArchive)
The above looks good to me.
and here is the cpp file in each I am registering all classes : -------------- register.cpp --------------- #include "customarchive.h" #include <boost/serialization/export.hpp> #include "A.h" BOOST_CLASS_EXPORT_GUID(A,"A")
Note that in subsequent versions of the library and documentation the BOOST_CLASS_EXPORT... macros have been redesigned somewhat to separate declaration from instantiation. The older macros you're using can work but they are confusing to get right. Look at the latest documentation to see the difference. You can then either then tweak your code to work with the older macros or use a later version of boost. In any case, reading the more recent documentation should help clarify what is going on. Robert Ramey -- View this message in context: http://boost.2283326.n4.nabble.com/BOOST-CLASS-EXPORT-GUID-with-custom-archi... Sent from the Boost - Users mailing list archive at Nabble.com.
participants (2)
-
Elizabeta
-
Robert Ramey