On Sun, Nov 25, 2018 at 07:22:54AM +0000, Stanislav Blinov via 
Digitalmars-d-learn wrote:
> On Sunday, 25 November 2018 at 07:19:50 UTC, Stanislav Blinov wrote:
> 
> > Granted, it may require some special syntax, i.e.
> > 
> > enum E {
> >     a,
> >     b if version(Windows),
> >     c if version(Windows),
> >     d if version(Posix),
> > }
> > 
> > or something to that effect.
> 
> Come to think of it, since UDAs are now allowed, the compiler could
> potentially be taught this:
> 
> enum E {
>     a,
>     @version(Windows) b,
>     @version(Windows) c,
>     @version(Posix)   d,
> }

Actually, I just thought of a way to do this with the existing language:
use a struct to simulate an enum:

        struct E {
                alias Basetype = int;
                Basetype impl;
                alias impl this;

                enum a = E(1);
                enum b = E(2);
                version(Windows) {
                        enum c = E(3);
                }
                version(Posix) {
                        enum c = E(4);
                        enum d = E(100);
                }
        }

It's not 100% the same thing, but gets pretty close, e.g., you can
reference enum values as E.a, E.b, you can declare variables of type E
and pass it to functions and it implicitly converts to the base type,
etc..

There are some differences, like cast(E) won't work like an enum, and
.max has to be manually declared, etc.. You'll also need to explicitly
assign values to each member, but for OS-dependent enums you have to do
that already anyway.


T

-- 
Let's eat some disquits while we format the biskettes.
              • Re: ver... H. S. Teoh via Digitalmars-d-learn
              • Re: ver... Neia Neutuladh via Digitalmars-d-learn
              • Re: ver... Jonathan M Davis via Digitalmars-d-learn
              • Re: ver... Stanislav Blinov via Digitalmars-d-learn
              • Re: ver... Jonathan M Davis via Digitalmars-d-learn
              • Re: ver... Stanislav Blinov via Digitalmars-d-learn
              • Re: ver... H. S. Teoh via Digitalmars-d-learn
              • Re: ver... Jonathan M Davis via Digitalmars-d-learn
              • Re: ver... Stanislav Blinov via Digitalmars-d-learn
              • Re: ver... Stanislav Blinov via Digitalmars-d-learn
              • Re: ver... H. S. Teoh via Digitalmars-d-learn
              • Re: ver... Stanislav Blinov via Digitalmars-d-learn
              • Re: ver... H. S. Teoh via Digitalmars-d-learn
              • Re: ver... Adam D. Ruppe via Digitalmars-d-learn
  • Re: version(StdDoc) Jonathan M Davis via Digitalmars-d-learn

Reply via email to