version specific enum members

Daniel Keep daniel.keep.lists at gmail.com
Thu Oct 29 22:03:23 PDT 2009



Phil Deets wrote:
> Hi, is there a way to add members to an enum based on conditional
> compilation symbols. I tried
> 
> enum Tag {
>    A, B,
>    version (symbol) {
>       C, D,
>    }
>    E,
> }
> 
> but it doesn't work. I know I could do
> 
> version (symbol) {
>    enum Tag { A, B, C, D, E }
> } else {
>    enum Tag { A, B, E }
> }
> 
> but I don't want to do that since in my case, there can be quite a few
> elements outside of the version, and I don't want to repeat them all.

template Version(char[] ident)
{
    mixin(`version(`~ident~`) const Version = true;
           else const Version = false;`);
}

char[] genEnum(bool flag1, bool flag2)
{
    return "A, B, "
         ~ (flag1 ? "C, D, " : "")
         ~ "E, F, "
         ~ (flag2 ? "G, H, " : "")
         ~ "G, ";
}

mixin(genEnum( Version!(`symbol`), Version!(`somethingElse`) ));

... is about the best you can do, I think.


More information about the Digitalmars-d-learn mailing list