The base class MUST be polymorphic - that is have at least one virtual function.
 
AND the the pointer to the base class - not the derived class should be serialized.
 
Robert Ramey
 
 
#include "stdafx.h"

#include "stdafx.h"

 

#include <sstream>

 

// include headers that implement a archive in simple text format

#include <boost/archive/text_oarchive.hpp>

#include <boost/archive/text_iarchive.hpp>

#include <boost/serialization/export.hpp>

 

 

class base {

public:

    base(){ m_val = 1; }

    void PrintVal( void )

    {

        printf(" Value: %d\n", m_val );

    }

protected:

// note:make polymporphic

    virtual void foo(void) = 0;

    friend class boost::serialization::access;

    template<class Archive>

    void serialize(Archive & ar, const unsigned int file_version){

        ar & m_val;

    }

    int m_val;

};

 

 

class derived : public base {

public:

    derived(){ m_val = 2; }

private:

    void foo(void){}

    friend class boost::serialization::access;

    template<class Archive>

    void serialize(Archive & ar, const unsigned int file_version){

        boost::serialization::base_object<base>(*this);

    }

};

 

BOOST_CLASS_EXPORT_GUID(derived, "derived")

 

void test4(){

    std::stringstream ss;

    boost::archive::text_oarchive oa(ss);

    const base *b = new derived();

    b->PrintVal();

    oa & b;

 

    boost::archive::text_iarchive ar(ss);

    b = NULL;

    ar & b;

    b->PrintVal();

}

 

int main() {

    test4();

    return 0;

}

 

 


_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users