On Friday 19 November 2010 12:56:38 Steven Schveighoffer wrote: > On Fri, 19 Nov 2010 15:54:08 -0500, Michal Minich > > <[email protected]> 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
