Getting the string representing the enum value
Ben Gardner
bengardner.uncrustify at gmail.com
Sun Apr 2 09:48:22 PDT 2006
I've done that "the hard way" in C.
Here's an example in D:
/////
import std.stdio;
import std.string;
enum X {
Apple,
Bat,
Car,
}
char [][] X_names = [
X.Apple : "Apple",
X.Bat : "Bat",
X.Car : "Car",
];
char [] get_X_name(X e)
{
if ((e >= X.min) && (cast(int)e < X_names.length) &&
(X_names[e] !is null)) {
return X_names[e];
}
return ("invalid");
}
X get_X_id(char [] name)
{
for (int idx = 0; idx < X_names.length; idx++) {
if ((X_names[idx] !is null) && (icmp(X_names[idx], name) == 0))
return cast(X)idx;
}
return cast(X)-1;
}
void main(char [][] args)
{
for (int i = -1; i < 4; i++)
{
writef("%d = '%s'\n", i, get_X_name(cast(X)i));
}
char [] name = "bat";
writef("id for '%s' is %d\n", name, cast(int)get_X_id(name));
}
////
Running this produces the output:
-1 = 'invalid'
0 = 'Apple'
1 = 'Bat'
2 = 'Car'
3 = 'invalid'
id for 'bat' is 1
Ben
Hasan Aljudy wrote:
> say I have an enum
>
> enum X
> {
> A,
> B,
> C
> }
>
> and I have
>
> void someFunc( X e )
> {
> //.. some code
> }
>
> I want to print the value of 'e' but I don't want to get a number!! I
> want to get a string that represents it. i.e. A or B or C
>
>
> void someFunc( X e )
> {
> toString(e);
> e.string;
> e.value;
> //or something like that ..
> }
>
> Is there any such thing in D?
>
More information about the Digitalmars-d-learn
mailing list