BOOST_CLASS_EXPORT_GUID with custom class archive

699 Views Asked by At

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 http://www.boost.org/doc/libs/1_49_0/libs/serialization/doc/archive_reference.html#usage :

here is my customarchive.h :

#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_oarchive_impl.hpp>
#include <boost/archive/binary_iarchive_impl.hpp>
#include <boost/archive/shared_ptr_helper.hpp>
class CloneBinaryIArchive : 
// don't derive from binary_oarchive !!! 
public boost::archive::binary_iarchive_impl< 
CloneBinaryIArchive, 
std::istream::char_type, 
std::istream::traits_type 
>, 
public boost::archive::detail::shared_ptr_helper 
{ 
   typedef CloneBinaryIArchive derived_t; 
   typedef boost::archive::binary_iarchive_impl< 
      CloneBinaryIArchive, 
      std::istream::char_type, 
      std::istream::traits_type 
   > base_t; 

  public: 
    CloneBinaryIArchive(std::istream & is,unsigned int flags = 0) : 
    base_t(is, flags) 
    {} 
    CloneBinaryIArchive(std::streambuf & bsb, unsigned int flags = 0) : 
    base_t(bsb, flags) 
    {}   

   int foo; 
}; 
BOOST_SERIALIZATION_REGISTER_ARCHIVE(CloneBinaryIArchive) 

and here is the cpp file in each I am registering all classes :

#include "customarchive.h" 
#include <boost/serialization/export.hpp>
#include "A.h" 
BOOST_CLASS_EXPORT_GUID(A,"A") 
0

There are 0 best solutions below