David Parks wrote:
> I'm having a newbie
issue with serialization on a derived class with a
> virtual
function. I'm using the 1.33.0 build on VS 7.1.
> I've shrunken my
code to a micro-version of what I tried to do. Here
> I have two
classes, A and B, where B is a subclass of A. They share a
> virtual
function (ie B overrides dumpFunc in A). I've registered B
> with
BOOST_CLASS_EXPORT(B). I've turned on RTTI in VS 7.1 (/GR or
>
whatever). Still, I get a run time assert error in the boost
library
> telling me that the derived/base relationship wasn't registered.
> Here's the code. I'll try to spell out the error
below.
> class B : public A
>
{
> friend class boost::serialization::access;
>
> template<class
Archive>
> void serialize(Archive
& ar, const unsigned int version)
>
{
> ar &
m_classNameB;
> };
> std::string
m_classNameB;
> public:
> B()
>
{
ar &
boost::serialization::base_object<A>(*this); //<<<<<
inssert this !
> m_classNameB =
"ClassB\n";
> };
> virtual void dumpFunc()
{};
> };
This
little detail isn't that obvious - even though it is described in the
manual. Normally, derived
classes
need to call serialization of their parents. This fact is leveraged to
"register"
the
relationship between a derived class and its parent which is
used
to
serialization a derived class from a base class pointer. If this
"base_object"
isn't
used, this relationship has to be made explicitly with "void_cast_register"
from
and even
more obscure lower level.
I made
this change and verified that your program compiles and runs
as
you would
hope.
Robert
Ramey