|
Boost : |
From: Valentin Bonnard (Bonnard.V_at_[hidden])
Date: 2000-07-30 14:09:04
Daryle Walker wrote:
> Is there a template class that helps indicate whether or not a type is
> polymorphic (i.e. dynamic_cast can work with it)?
No
> If not, how can we make one?
This is sometimes discussed in comp.lang.c++.moderated.
There are no good, general solutions.
You want to determine if type B is polymorphic.
We can check if type D, derived from B, is polymorphic
(it is iff B is polymorphic also):
struct D : B {} d;
bool is_poly = typeid ((B&) d) == typeid (D);
Precondition: B is default constructible.
Or,if we make some assumptions about the layout
of classes:
struct D : B { virtual ~D (); };
const bool is_poly = sizeof (D) == sizeof (B);
Here we assume that a non polymorphic class has no vtable
pointer, so D would have to be larger than B. It will or
won't work if B has a virtual base classes but no virtual
functions, depending on the way vitual bases are accessed
(by the vtable or by an index in the object itself).
The other question is: when do you need to know if a class
is polymorphic or not ?
Unless some Boost component needs to know that, this
discution is probably more appropriate in
comp.lang.c++.moderated.
-- Valentin Bonnard
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk