|
Boost : |
From: Peter Dimov (pdimov_at_[hidden])
Date: 2000-07-31 12:54:41
> Unfortunately, we don't get a compile time constant out of this technique.
> To be honest though, I never found a use for it... is there one?
There are two scenarios where is_polymorphic is useful:
* You have a Base*, but you know that it really points to a Derived. You
can't static_cast, because this doesn't work with some contrived multiple
inheritance situations; and you can't dynamic_cast because you don't know
whether Base is polymorphic or not.
* You have a pointer to an object and you need to find the beginning of the
object (the original pointer may point inside the object when multiple
inheritance is involved.) dynamic_cast<void*> will do this for polymorphic
types, for the others you assume that the pointer you have is the beginning.
I think that both problems can't be solved in the general case, even with an
is_polymorphic predicate, but the cases where the solutions don't work can
be considered 'rare.'
The real solution to this is to modify dynamic_cast to work on
non-polymorphic types as well (when inside a template.)
-- Peter Dimov Multi Media Ltd.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk