Shin Fujishiro wrote:
Hi,I've had fun with the allMembers traits over the past few days and found it more powerful than I thought. __traits(allMembers, T) returns the member names of T. As some might already know, T is not restricted to a class or struct; it can also be an enum, template, or even module. Try this: -------------------- enum E { a, b, c } template T() { int x, y, z; } import std.stdio; pragma(msg, __traits(allMembers, E).stringof); pragma(msg, __traits(allMembers, T).stringof); pragma(msg, __traits(allMembers, std.stdio).stringof); -------------------- You'll like the result :). It must be usable! For example, using allMembers with enums, I could implement enumToString and enumFromString without defineEnum. Code: http://codepad.org/HVvPjoI7 So, what other uses could there be?
Wow, I didn't know about this! It might as well be everything needed for a full-blown compile-time reflection package!
To answer your question: for starters, try to implement BlackHole and WhiteHole as explained here:
http://erdani.dreamhosters.com/cranking-policies-up.pdf Andrei
