Nick Sabalausky wrote:
Is there any way to do this (preferably in D1) with reflection? (ie, without
having to manually create a conversion func/lookup for every value of every
enum.)
----------------------
enum Shape
{
Square, Circle
}
char[] foo(Shape s)
{
// ?????
}
// Either one of these, I don't really care which
assert(foo(Shape.Square) == "Shape.Square");
assert(foo(Shape.Square) == "Square");
----------------------
You got to give it to Walter: the code is pretty clean (for C++ code anyway)
Add the attached code to src\dmd\mtype.c, line 5025 (in
TypeEnum::dotExp, after the #endif). This now works:
import std.stdio;
enum ABC { A, B, C };
void main(string[] args)
{
foreach(a; ABC.tupleof)
{
writefln(a);
}
}
prints:
A
B
C
Of course, I'm way over my head here. I've just copied the code from
struct.tupleof to make enum.tupleof and creating a tuple of StringExps
insteadof DotVarExps, whatever they are....
L.