Boost logo

Boost :

Subject: [boost] boost::shared_ptr and serialization
From: Klaus - Peter Weber (kpw57_at_[hidden])
Date: 2012-11-28 06:41:15


Hi,

I am trapped in an assertion from boost::serialization and maybe someone here has an idea how to solve this. I am using Visual Studio 2008 with Boost 1.49.0 having a simple class in a shared library like :

class CTest : public ICTest
{
  friend class boost::serialization::access;
  template<class Archive>
  void serialize( Archive & ar, const unsigned int version)
  {
     ar & boost::serialization::base_object<ICTest>(*this);
     ar & i;
  };
  public :
     CTest::CTest():i(0){};
     void setI( int _i){ i = _i;};
     int getI( void){ return i;};
     int i;
};

and an interface class like :

class ICTest
{
  friend class boost::serialization::access;
  template<class Archive>
  void serialize( Archive & ar, const unsigned int version){};

  public :
      virtual ~ICTest(){};
      virtual void setI( int _i) = 0;
      virtual int getI( void) = 0;
};

For the CTest class is not exported and not accessible directly from out of the shared lib, an interface is provided :

MY_DLL_EXPORT_MACRO ICTest* CreateCTestClassInstance( void)
{
        return new CTest();
}
typedef boost::shared_ptr<ICTest> pICTest;

Instantiating the interface in my program and using CTest class instance:

pICTest p1( CreateCTestClassInstance());
p1->setI( 1);
 
works fine, so far so good. A Problem occures when I try to serialize CTest class like :

{
  std::ofstream ofs( fileNameTXT);
  boost::archive::text_oarchive ar( ofs);
  ar & p1; // causes an assertion
}

This results in an assertion (->BOOST_ASSERT(false);) in basic_serializer_map.cpp in line 102. It seems to me, there is a problem with finding the derived class in the basic_serializer_map. Instantiation of CTest class directly terminates with no error, which means, the serialization basically works correctly. Does anyone have an idea how to serialize an interface class correctly ?

Peter


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk