Find out most derived class in base class
Jonathan M Davis
jmdavisProg at gmx.com
Fri Nov 19 13:05:40 PST 2010
On Friday 19 November 2010 12:56:38 Steven Schveighoffer wrote:
> On Fri, 19 Nov 2010 15:54:08 -0500, Michal Minich
>
> <michal.minich at gmail.com> wrote:
> > On Fri, 19 Nov 2010 20:50:13 +0000, Michal Minich wrote:
> >> How do I solve this, without parametrizing class.
> >>
> >> class Base {
> >>
> >> void foo () { I want get somehow to type *Derived2* at CT }
> >>
> >> }
> >>
> >> class Derived1 : Base { }
> >> class Derived2 : Base { }
> >
> > By making mistake, I realized that it is not possible :) The last line
> > should be:
> >
> > class Derived2 : Derived1 { }
> >
> > The *Base* has two most derived classes in the first example.
> >
> > Anyway, is it somehow possible to iterate derived classes if I only know
> > base class? At CT.
>
> No. You don't know all the derived classes until link time, and there's
> no doing anything except linking at link time.
>
> You should be able to find out at runtime which classes are derived from
> Base.
And how would you know that at runtime? All reflection in D at this point is
compile-time reflection, and that isn't going to help you any here (for the very
reasons that you list). I don't see how you could determine which classes are
derived from a particular class at runtime. You could use typeof() to determine
what the exact type of a reference is, but that wouldn't help you determine what
derived classes exist for a particular type. What you'd really need is runtime
reflection, which D doesn't have.
- Jonathan M Davis
More information about the Digitalmars-d-learn
mailing list