tagged unions
It would be very useful to have tagged unions. These are like enums but each member may be a structure. Here's an example:
union MyUnion {
Variant1(int),
Variant2(string),
Variant3 { float x; float y; }
}
void main () {
MyUnion u = MyUnion.Variant1(3);
u = MyUnion.Variant2("hello");
if (u is MyUnion.Variant1) {
int i = ((MyUnion.Variant1)u).member1;
}
}
in C code this could look like:
typedef struct _MyUnion MyUnion;
typedef struct _MyUnionVariant1 MyUnionVariant1;
typedef struct _MyUnionVariant2 MyUnionVariant2;
typedef struct _MyUnionVariant3 MyUnionVariant3;
struct _MyUnion {
enum {
MY_UNION_VARIANT_1,
MY_UNION_VARIANT_2,
MY_UNION_VARIANT_3
} tag;
union {
MyUnionVariant1 _variant1;
MyUnionVariant2 _variant2;
MyUnionVariant3 _variant3;
};
};
struct _MyUnionVariant1 {
int _1;
};
struct _MyUnionVariant2 {
string _1;
};
struct _MyUnionVariant3 {
float x;
float y;
};
See also:
Edited by Princeton Ferro