From: Emily Winch (emily_at_[hidden])
Date: 2002-02-08 12:13:43


Sylvain wrote:

[ my example of choosing between static and dynamic polymorphism
at compile time ]

> I see. But how does the user choose one way or the other ? If
> suddenly a type is no more accessible at compile time (header split,
> etc.), the user has to change his code from static_poly to
> dynamic_poly in all the places instances of the type were beeing
> serialized.

Then the user needs another layer of abstraction, to make sure the
decision is only made in one place.

> I would prefer one of the following scenarii:
> 1- Only the dynamic case is taken into account. After all, if the
> dynamic case works, why bother with the static case ?

I'd like to be able to do something a bit like

typedef typelist<foo, bar, baz, haddock> list_type;
tuple<list_type> t = /* something */;
serialise(t, stream);
// ...
deserialise(t, stream);

and not have to build into my code a bunch of stuff designed for
more heavyweight serialisation than I need. Nevertheless I'd like
to be able to write

std::vector<variant<list_type> > v;
deserialise(v, stream);

in some cases where I need that kind of behaviour.

I'm not suggesting that anyone else necessarily wants to do
this, maybe it's only me :)

> 2- dynamic and static case are handled, but automatically (for
> example, the dynamic mechanism is turned on for a type by the use of
> the macro that registers this type into the factory).

What if I'd like to have static polymorphism for type foo in the common case

where I'm stuffing the data in a file to look at later (versioning isn't a
problem in this case), and dynamic polymorphism for foos when I'm reading
from XML that came over the network?

Emily.