I've got a system where
class A
{
A();
A(const string&);
virtual ~A();
};
class C : public A
{
C();
C(const A&, float);
virtual ~C();
};
BOOST_CLASS_EXPORT( A )
BOOST_CLASS_EXPORT( C )
main()
{
...
const A* a = new a("stuff");
const C* c = new c(*a, 52.54390f);
{
ofstream ofs("dump.bin");
boost::archive::text_oarchive oa(ofs);
oa<<a<<c;
}
...
A* a2=NULL;
C* c2=NULL;
try
{
ifstream ifs("dump.bin");
boost::archive::text_iarchive ia(ifs);
ia>>a2;
ia>>c2;
}
catch(boost::archive::archive_exception& ae)
{
cout<<ae.what();
}
}
This works just fine. If I replace
A* a2=NULL;
C* c2=NULL;
with
A* a2=NULL;
A* c2=NULL;
Then it throws an unregistered_class exception. If I change the iarchive to take:
const A* a = new A("I'm cool");
const A* c = new C(*a,54.2f);
then I can unarchive it with a pair of A*.
Is this by design? Seriously? I can't save derived pointers and unarchive base pointers?
Larry