Reflection: Get all inherited classes of a base class
Adam D. Ruppe
destructionator at gmail.com
Sat Dec 22 14:28:56 PST 2012
On Saturday, 22 December 2012 at 22:14:28 UTC, nrgyzer wrote:
> is it possible to get a list of all inherited classes from a
> base class like this:
Yes, though it isn't compile time - gotta be runtime.
ClassInfo[] getChildClasses(ClassInfo c) {
ClassInfo[] info;
// MoudleInfo is a magical thing in object.d,
// implicitly imported, that can loop over all
// modules in the program: user and library
foreach(mod; ModuleInfo) {
// the localClasses member gives back
// ClassInfo things that we can compare
foreach(cla; mod.localClasses) {
// note: we could also check this
// recursively and check
// cla.interfaces as well as base
if(cla.base is c)
info ~= cla;
}
}
return info;
}
So this should be enough for your example assert, but remember
you can't do things like templates on this, since it is all
runtime.
More information about the Digitalmars-d-learn
mailing list