Re: Use members of a Named Enum without using Enum name?
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 Or at the usage site: with(PolygonT) { someFunc(TRIANGLE); } I don't mind if adding another enum with members of the same name like this: enum CelestialBodiesT : byte { MOON, SUN, BLACK_HOLE, STAR } ...would force me to call someFunc(PolygonT.STAR) by the compiler, but for the case where there's no ambiguity, I don't want to write out the type of the enum... That'll work as long as the two enums are defined in separate modules, then only import the one you need to use at the time. Otherwise, they will conflict and it will force you to write it out long form again.
Re: Use members of a Named Enum without using Enum name?
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~";"
Re: Use members of a Named Enum without using Enum name?
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