Boost logo

Boost Users :

From: Robert Ramey (ramey_at_[hidden])
Date: 2005-07-12 10:44:47


First - there's no way to do it.

Second - that's probably the best anyway. This better mirrors standard C++ behavior in that non-polymophic (mono-morphic?) base classes do not have any access to drived data or functions.

Third - there really is a a way to do it using one's own extended_type_info strategy - see docs and test_no_rtti. But I would only recommend this for those how can't use an rtti system and who do thier own dental work.

Robert Ramey

"Yan Zhang" <Yan.Zhang_at_[hidden]> wrote in message news:F96935FCB9C3D549B3B6CD8915811A2F0FF00D8F_at_mail60nt.mitchell.com...
  Hi Robert,

   

  I know that it works for abstract base class. But if the base class is not abstract class how you do it? Is it possible?

   

  Thanks,

   

  yan

   

------------------------------------------------------------------------------

  From: boost-users-bounces_at_[hidden] [mailto:boost-users-bounces_at_[hidden]] On Behalf Of Robert Ramey
  Sent: Monday, July 11, 2005 3:55 PM
  To: boost-users_at_[hidden]
  Subject: Re: [Boost-users] How to serialize a derived class object withbaseclass pointer?

   

  try making the base class a polymorphic class by adding the following changes:

   

  virtual ~CMyCls1() = 0;

    "Yan Zhang" <Yan.Zhang_at_[hidden]> wrote in message news:F96935FCB9C3D549B3B6CD8915811A2F0FF00C7C_at_mail60nt.mitchell.com...

    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;

       virtual ~CMyCls1() = 0;

    };

     

    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;

       virtual ~CMyCls2();

    };

     

    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 mailing list
    Boost-users_at_[hidden]
    http://lists.boost.org/mailman/listinfo.cgi/boost-users

------------------------------------------------------------------------------

  _______________________________________________
  Boost-users mailing list
  Boost-users_at_[hidden]
  http://lists.boost.org/mailman/listinfo.cgi/boost-users



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