On 08/15/2015 09:22 AM, QuizzicalFella wrote:
On Saturday, 15 August 2015 at 15:53:23 UTC, Adam D. Ruppe wrote:
On Saturday, 15 August 2015 at 15:37:42 UTC, QuizzicalFella wrote:
I'd like to be able to call someFunc(TRIANGLE) rather than
someFunc(PolygonT.TRIANGLE).
Two options come to mind:
alias TRIANGLE = PolygonT.TRIANGLE;
// etc
...if I wanted to write a mixin that iterated over all the elements in
an enum, how would I get a member to print its name without the type?
And how do I get the type to print itself?
foreach(member; enum)
char[] output ~= "alias
"~member.name~"="~enum.name~"."~member.name~";"
Fundamentally, __traits(allMembers) and .stringof but the following
enumMembers present them as a range:
import std.stdio;
enum PolygonT : byte { TRIANGLE, RECTANGLE, STAR }
auto enumMembers(E)()
{
import std.conv : to;
import std.algorithm : map;
return [ __traits(allMembers, E) ].map!(a => a.to!string);
}
void info(E)()
{
writefln("The members of %s: %-(%s, %)",
E.stringof, enumMembers!PolygonT);
}
void main()
{
info!PolygonT();
}
Ali