On 04/04/2013 11:50 PM, Chad Joan wrote:
...

FWIW, I was able to make a template to allow me to do what I want:

-------------------
mixin template dequalifyEnumMembers(theEnum, members...)
{
    static if ( members.length > 0 )
    {
        mixin("alias "~theEnum.stringof~"."~members[0]
            ~" "~members[0]~";");
        mixin dequalifyEnumMembers!(theEnum, members[1..$]);
    }
}

mixin template dequalifyEnum(theEnum) if (is(theEnum == enum))
{
    mixin dequalifyEnumMembers!(theEnum, __traits(allMembers, theEnum));
}
-------------------

Usage:

-------------------
mixin dequalifyEnum!MyEnum;
enum MyEnum
{
    Pliers,
    Forceps,
    Picks,
}

void foo(MyEnum m)
{
    final switch(m)
    {
        // Comment one of these lines out to get the
        //   "not represented in enum" error.
        case Pliers:  writeln("Pliers");  break;
        case Forceps: writeln("Forceps"); break;
        case Picks:   writeln("Picks");   break;
    }
}

void main()
{
    foo(Picks);
}
-------------------

I still can't escape the feeling that this is a hack to work around limitations of the language or lack of knowledge.

Reply via email to