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