Boost logo

Boost :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2002-09-11 08:43:04


From: "Vladimir Prus" <ghost_at_[hidden]>
> Peter Dimov wrote:
> > From: "Vladimir Prus" <ghost_at_[hidden]>
> >
> >>I have tried hard to explain that while typeid would make archives
> >>unportable between different machines (not really an issue if there's
> >>denamgler for type_info::name() and I think work is underway on it),
> >
> >
> > An issue. You never know whether, or how, type_info::name() is mangled,
or
> > whether there is type_info::name() at all (speaking of portable code.)
>
> You still know that for any given platform.

If you are willing to confine yourself to a given platform/compiler/version,
which I am not, you don't need to demangle type_info::name.

> > The only portable C++-only solution (AFAIK) is to require registration
of
> > all polymorphic types, including an identifier that uniquely describes
the
> > type.
>
> You see, proposed serialization library requires much more than that. It
> requires the you
> 1. Register all polymorphic classes with any instance of
> basic_{i,o}archive that you create

My own serialization framework has the same requirement, unfortunately. I
haven't been able to avoid it.

> 2. Register them in the same order everywhere.

Yes, this may be considered inconvenient.

> > Not only that, but you also need to register derived to base
conversions,
> > too, as I recently realized, since Derived * -> void * -> Base * is not
> > required to work.
>
> Why do you need such a conversion?

Because when you are reading a polymorphic object via a pointer to Base, you
don't have Derived available at compile time; you only have a string that
identifies that Derived. You can dispatch on that string and get back a
void* to the object; now you must convert that void* to a Base*.

> >>Except
> >>1. It's much more terse
> >
> >
> > And much less const-correct.
>
> You mean that if 'describe' is not declared const, you can't serialize
> const object without const_cast somewhere? Seems so. Did you say this
> before?

Yes, I did. :-)

Having to write essentially the same code twice seems inconvenient, but I am
willing to pay the price. In fact currently I'm writing the same code three
times (the third variation includes variable names).


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk