How can I search for an enum by its values? For example I have
struct TestTraits {
        int value1;
        string value2;
}

enum Test : TestTraits {
        TEST = TestTraits(1, "test1"),
        TESTING = TestTraits(5, "test5")
}

and I have the int 5 and need to find TESTING with it.

In java I would create a SearchableEnum interface, make all searchable enums implement it and use this method to find them.
public static <T extends SearchableEnum> T find(T[] vals, int id) {
        for (T val : vals) {
                if (id == val.getId()) {
                        return val;
                }
        }
        return null;
}
But the way enums work in D doesn't seem to permit this.

And why on earth are different enum items with the same values equal to each other? Say I have an enum called DrawableShape

struct DrawableShapeTraits {
        bool useAlpha;
        int sideCount;
}

enum DrawableShape : DrawableShapeTraits {
        RECTANGLE = DrawableShapeTraits(true, 4),
        DIAMOND = DrawableShapeTraits(true, 4),
}

Now say I have some code that does this

if(shape == DrawableShape.DIAMOND)
... render a diamond
else if(shape == DrawableShape.RECTANGLE)
... render a rectangle

Now even if shape is a DrawableShape.RECTANGLE it's going to render a DrawableShape.DIAMOND unless I add a dummy value to differentiate them.

Reply via email to