Boost logo

Boost Users :

Subject: [Boost-users] Derived class is not serialising/de-serialising...
From: Marcus MacWilliam (marcus.macwilliam_at_[hidden])
Date: 2013-08-05 05:35:45


Hello,

I have the following 2 classes:

>>BaseClass.h

public BaseClass
{
private:
    int m_iMessageId;
    friend class boost::serialization::access;
    template<class Archive>
    void serialize(Archive &archive,
                   const unsigned int version)
    {
       std::cout << "BOOST: Base Class" << std::endl; // TODO: remove this
       archive & m_iMessageId;
    }
};

>>DerivedClass.h

public Derived : public Base
{
private:
    int m_iComPort;
    friend class boost::serialization::access;
    template<class Archive>
    void serialize(Archive &archive,
                   const unsigned int version)
    {
       std::cout << "BOOST: Derived Class" << std::endl; // TODO: remove
this
       archive &
boost::serialization::base_object<CDeviceClientRequest>(*this)
               & m_iComPort;
    }
};

and the following 2 methods to send and receive:

>>Communication.cc

#include "DerivedClass.h"
BOOST_CLASS_EXPORT(DerivedClass);

void Communication::sendRequest(
    BaseClass& request)
{
    // Open the file for write, and truncate.
    std::ofstream file(getFilename().c_str(), std::ios::trunc);

    // Use boost to serialize the object to the file.
    boost::archive::binary_oarchive archive(file);
    archive << request;

    // Close the file.
    file.close();
}

void Communication::receiveRequest(
    BaseClass& request)
{
    // Open the file for read.
    std::ifstream file(getFilename().c_str());

    // Use boost to serialize the object from the file.
    boost::archive::binary_iarchive archive(file);
    archive >> request;

    // Close the file.
    file.close();
}

When I check the client and server the only output I see is:

BOOST: Base Class

However I am instantiating the derived class and passing it
to the functions above. Why am I not seeing:

BOOST: Base Class
BOOST: Derived Class

Any help greatly appreciated.

Thanks,

-- 
Marcus A.T MacWilliam, Senior Software Engineer. 1Spatial Ltd.
Tel: +44 (0)1223 420414, ext 2289,    Mob: +44 (0)7803 706597.
E-Mail: marcus.macwilliam_at_[hidden] Skype:marcus.macwilliam
Tennyson House, 7 Cambridge Business Park, Cambridge, CB4 0WZ.
Registered in England No. 4785688,     VAT Reg. No. 135539408.
Website: http://www.1spatial.com/    E-mail: info_at_[hidden]

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