On Tuesday, 29 September 2015 at 03:31:44 UTC, Nicholas Wilson wrote:
so I have a bunch of enums (0 .. n) that i also want to represent as flags ( 1 << n foreach n ). Is there anyway to do this other than a string mixin?

You could cheat with operator overloading:

        enum blah {
                foo,
                bar,
                baz,
        };
        
        struct EnumToFlags(alias E) {
                template opDispatch(string Name) {
                        enum opDispatch = 1 << __traits(getMember, E, Name);
                };
        };
        
        alias blahFlags = EnumToFlags!blah;
        
        static assert(blahFlags.foo == (1 << blah.foo));
        static assert(blahFlags.bar == (1 << blah.bar));
        static assert(blahFlags.baz == (1 << blah.baz));

Reply via email to