Fun with allMembers

Shin Fujishiro rsinfu at gmail.com
Wed May 13 20:22:54 PDT 2009


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?



More information about the Digitalmars-d mailing list