Re: Use members of a Named Enum without using Enum name?

2015-08-15 Thread QuizzicalFella via Digitalmars-d-learn

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~";"





Use members of a Named Enum without using Enum name?

2015-08-15 Thread QuizzicalFella via Digitalmars-d-learn
I have a named enum that I'd like to keep named, that I'd like to 
use as a type, but every time I use a member I'd rather not write 
out the enum name. I have a situation like the following:


enum PolygonT : byte { TRIANGLE, RECTANGLE, STAR }

void someFunc(PolygonT shape) { //some stuff }

I'd like to be able to call someFunc(TRIANGLE) rather than 
someFunc(PolygonT.TRIANGLE). Being clear but not being too long 
is my aim. Writing the type makes it too verbose and I have lazy 
fingers...


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...


I know I can add in an 'alias this' for classes and structs, but 
I think I only get one and if it's an enum I'm using all over the 
place I don't want to 'alias this' it everywhere...


Is there a way I can do this while retaining type safety? (can I 
be lazy and protected at the same time?)