Thread overview
Neater enum + version
Nov 18, 2018
Vladimirs Nordholm
Nov 18, 2018
Neia Neutuladh
Nov 18, 2018
Vladimirs Nordholm
Nov 18, 2018
Jacob Carlborg
November 18, 2018
Currently I have something like

    version (Posix)
    {
        enum foo = "bar";
    }
    else
    {
        enum foo = "baz";
    }

Is there anyway to make it "neater"? Maybe something in one line:

    enum foo = version (Posix) { "posix" } : { "other" } ;
November 18, 2018
On Sun, 18 Nov 2018 17:47:07 +0000, Vladimirs Nordholm wrote:
> Is there anyway to make it "neater"? Maybe something in one line:
> 
>      enum foo = version (Posix) { "posix" } : { "other" } ;

If you're doing it often:

T ifPosix(T)(T a, T b)
{
  version (Posix) return a; else return b;
}
enum foo = ifPosix("posix", "other");

If it's a one-off thing, though, there's not much you can do.
November 18, 2018
On Sunday, 18 November 2018 at 17:52:21 UTC, Neia Neutuladh wrote:
> On Sun, 18 Nov 2018 17:47:07 +0000, Vladimirs Nordholm wrote:
>> Is there anyway to make it "neater"? Maybe something in one line:
>> 
>>      enum foo = version (Posix) { "posix" } : { "other" } ;
>
> If you're doing it often:
>
> T ifPosix(T)(T a, T b)
> {
>   version (Posix) return a; else return b;
> }
> enum foo = ifPosix("posix", "other");
>
> If it's a one-off thing, though, there's not much you can do.

Ah. Thank you for the example, might use that some other time.

Thanks :)
November 18, 2018
On 2018-11-18 18:52, Neia Neutuladh wrote:
> On Sun, 18 Nov 2018 17:47:07 +0000, Vladimirs Nordholm wrote:
>> Is there anyway to make it "neater"? Maybe something in one line:
>>
>>       enum foo = version (Posix) { "posix" } : { "other" } ;
> 
> If you're doing it often:
> 
> T ifPosix(T)(T a, T b)
> {
>    version (Posix) return a; else return b;
> }
> enum foo = ifPosix("posix", "other");
> 
> If it's a one-off thing, though, there's not much you can do.

This can be generalized by passing in the version identifier as a string and do a string mixin.

-- 
/Jacob Carlborg