On Fri, 19 Nov 2010 16:05:40 -0500, Jonathan M Davis <[email protected]> wrote:

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).

All the ModuleInfo and ClassInfo types are stored in an array somewhere in the runtime. Take a look at Object.factory() for an example of how to find a class.

If you can iterate all the ClassInfo's in the application, you can find out which ones derive from a base.

-Steve

Reply via email to