Finding class template instantiations via runtime reflection (for openmethods)
Jean-Louis Leroy
jl at leroy.nyc
Thu Sep 21 20:32:38 UTC 2017
It did not take long! Someone tried to create templatized open
methods and it didn't work right of the box. I expected that, but
in fact there may be a bit of hope. You cannot have virtual
function templates in C++ or in D because the layout of the
vtables have to be known at compile time - but openmethods
creates its method tables at runtime so maybe it can be made to
work.
I stumbled upon a problem very quickly: it seems that classes
that come from class template instantiations are not registered
in ModuleInfo - see below,
import std.stdio;
class Foo {}
class Bar(T) : Foo
{
int i;
}
alias BarInt = Bar!int;
const barInt = new BarInt;
void main()
{
foreach (mod; ModuleInfo) {
foreach (c; mod.localClasses) {
writeln(c);
}
}
}
...output:
modtemp.Foo
core.exception.RangeError
core.exception.AssertError
etc...
Neither 'Bar!int' nor 'BarInt' appear in 'localClasses'.
Ideas?
More information about the Digitalmars-d
mailing list