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
#include
#include
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