Boost logo

Boost Users :

From: Yan Zhang (Yan.Zhang_at_[hidden])
Date: 2005-07-11 16:37:23


Hi,

 

I'm trying to serialize an object of derived class with a base class
pointer, somehow only base class's serialization member function got
called. Here is the code (simplified):

 

class CMyCls1

{

public:

      CMyCls1() : m(10) {}

      ~CMyCls1() {}

 

private:

friend class boost::serialization::access;

      template<class Archive>

    void serialize(Archive &ar, const unsigned int version)

    {

            ar & BOOST_SERIALIZATION_NVP(m);

    }

 

      int m;

};

 

class CMyCls2 : public CMyCls1

{

public:

      CMyCls2() : x(1.5) {}

      ~CMyCls2() {}

 

private:

      friend class boost::serialization::access;

      template<class Archive>

    void serialize(Archive &ar, const unsigned int version)

    {

            ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(CMyCls1);

            ar & BOOST_SERIALIZATION_NVP(x);

    }

 

      double x;

};

 

void main ()

{

 

            CMyCls1 *pmycls = new CMyCls2;

            ...

      oa.register_type(static_cast<CMyCls1 *>(NULL));

      oa.register_type(static_cast<CMyCls2 *>(NULL));

      oa << BOOST_SERIALIZATION_NVP(pmycls);

            ...

}

 

Look at the archive file, only base class data is serialized. Actuall,
CMyCls2::serialization() is not called at all. How do you serialize a
derived class object with a pointer of base class?

 

Thanks,

 

Yan

 

 



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net