What I meant with anonymous enums was:
https://dlang.org/spec/enum.html#anonymous_enums. Maybe I
couldn't explain well but I believe D have anonymous enums. I am
sorry I have forgotten to remove " :string" in my example from
the "enum : string". Please stretch out ": string" part my
problem is not related with that.
I am not sure if it is a good one but I found a solution for my
problem
double ReturnCoolNess(U)( U enumVal )
{
switch (enumVal)
{
case KErdem:
{
return 0.0
}
case Ali:
{
return 100.0;
}
case Salih:
{
return 100.0;
}
// etc..
}
}
ReturnCoolNess(KErdem); ---> Compiles
D does not have anonymous enums. Either you're declaring an
enum which creates a new type and therefore has a name and a
base type, or you're just creating manifest constants that
don't create a new type. e.g.
enum MyEnum : string
{
a = "hello",
b = "foo",
c = "dog",
d = "cat"
}
vs
enum string a = "hello";
enum string b = "foo";
enum string c = "dog";
enum string d = "cat";
or
enum a = "hello";
enum b = "foo";
enum c = "dog";
enum d = "cat";
If you want a function to accept values that aren't tied to a
specific enum, then just have the function take the base type.
Now, within sections of code, you can use the with statement to
reduce how often you have to use the enum type's name, e.g.
with(MyEnum) switch(enumVal)
{
case a: { .. }
case b: { .. }
case c: { .. }
case d: { .. }
}
but you can't have an enum without a name or just choose not to
use an enum's name. With how enums work in D, there's really no
point in having them if you're not going to treat them as their
own type or refer to them via the enum type's name. If that's
what you want to do, then just create a bunch of manifest
constants.
- Jonathan M Davis