Putting things in an enum's scope

Mint via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Apr 10 14:55:25 PDT 2016


On Wednesday, 6 April 2016 at 13:59:42 UTC, pineapple wrote:
> Is there any way in D to define static methods or members 
> within an enum's scope, as one might do in Java? It can 
> sometimes help with code organization. For example, this is 
> something that coming from Java I'd have expected to be valid 
> but isn't:
>
> enum SomeEnum{
>     NORTH, SOUTH, EAST, WEST;
>
>     static int examplestaticmethod(in int x){
>         return x + 2;
>     }
> }
>
> int z = SomeEnum.examplestaticmethod(2);

You can't declare functions inside of an enum, however, you can 
emulate the behaviour using an anonymous enum inside of a struct 
or class.

ie.

struct SomeEnum
{
     enum : SomeEnum
     {
         NORTH = SomeEnum("North"),
         EAST  = SomeEnum("East"),
         SOUTH = SomeEnum("South"),
         WEST  = SomeEnum("West")
     }

     const string name;

     static SomeEnum getWithName(string name)
     {
         // . . .
     }
}



More information about the Digitalmars-d-learn mailing list