On Friday, 12 October 2018 at 12:43:53 UTC, Paul Backus wrote:
On Wednesday, 10 October 2018 at 22:56:14 UTC, James Japherson wrote:
The point of all this is because D does not allow nesting of enums

which allows for nice use of . to separate hiearchies:

enum A
{
   enum B
   {
      X,
   }
}

A.B.X, rather than having to have one large flat enum and do things like A_B_X.

You can use a mixin template to introduce a new namespace:

https://run.dlang.io/is/K0kJJl

True, but D has namespaces elsewhere, which don't require you to clutter some other namespace with your enums:

struct A {
    enum B {
        X,
    }
}

final abstract class C {
    enum D {
        Y,
    }
}

This has the added benefits of 1) being more obvious, and 2) you can put other stuff in there.

On Wednesday, 10 October 2018 at 22:56:14 UTC, James Japherson wrote:
I know one can use structs but it is messy and not general enough.

Please do elucidate - what do you mean not general enough? When is a struct less general than an enum?


struct A
{
    alias Dispatch this;
}

A.B.X

but it requires more machinery to setup.

Also:

alias A = Dispatch;
A.B.X;


Note that this results in Dispatcher!("B", "X"), so you'll have to pass the "A" manually (the same problem exists in your code above):

alias A = Dispatcher!"A";
A.B.X; // Dispatcher!("A", "B", "X")

--
  Simen

Reply via email to