hyp <nore...@gmail.com> wrote:


Hello,

I know you can easily get the base class of some class in D. However is there any way to get a list of classes that inherit a given class? I was reading around the docs, but couldn't find anything :/. But maybe someone knows how to do it?

This question is probably better asked in digitalmars.D.learn.

As for the solution, this works:

TypeInfo_Class[] getSubClasses( Object o ) {
    typeof( return ) result;
    auto base = o.classinfo;

    foreach ( m; ModuleInfo ) {
        foreach ( c; m.localClasses ) {
            auto a = c;
            while ( a && a != base ) {
                a = a.base;
            }
            if ( a == base ) {
                result ~= c;
            }
        }
    }

    return result;
}


class A {}
class B : A {}

void main( ) {
    writeln( getSubClasses( new A() ) );
}

Do note however, that templated classes do not show up in this search.

--
Simen

Reply via email to