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