Passing a module in a template parameter list to __traits(allMembers, module)
Andrej Mitrovic
andrej.mitrovich at gmail.com
Tue Feb 26 11:07:42 PST 2013
On Tuesday, 26 February 2013 at 19:03:01 UTC, Ben Gertzfield
wrote:
> Hi folks,
>
> In preparation for my upcoming talk at DConf 2013, I'm working
> on a compile-time dependency injection prototype for D.
>
> I'd like part of public interface for this system to take a
> module at compile time, and return a list of the classes in
> that module. Something like:
>
> string GetMembers(T)() {
> auto members = [__traits(allMembers, T)];
> return join(result, ", ");
> }
Use an alias:
string GetMembers(alias T)() {
auto members = [__traits(allMembers, T)];
return join(members, ", ");
}
void main() {
stdout.writefln("Got members: %s", GetMembers!(std.stdio));
}
Also make sure you parenthesize the call in GetMembers. For some
reason these two are different:
GetMembers!std.stdio // actually calls (GetMembers!std).stdio
GetMembers!(std.stdio)
That could be a bug though.
More information about the Digitalmars-d
mailing list