On 4/21/20 12:03 PM, Russel Winder wrote:
Hi,
Given an enum:
enum ZoneNumber {
One = 1,
Two = 2,
}
then which of these is the right way of accessing the value?
cast(ubyte)ZoneNumber.One
to!ubyte(ZoneNumber.One)
I generally do this:
ubyte(ZoneNumber.One)
conversely what is the right way of going the other way:
cast(ZoneNumber)1
This will incur zero runtime cost, so I would recommend that.
to!ZoneNumber(1)
This works too, I think it just does the equivalent of the first, but if
not inlined, you will incur some runtime cost.
I tried:
enum ZoneNumber : ubyte {
One = 1,
Two = 2,
}
but the members One and Two still seem to be types as int. :-(
They are typed as ZoneNumber, which is a derivative of ubyte. What
measurement are you doing to determine that they are int?
auto x = ZoneNumber.One;
ubyte y = x; // fine
If you leave off the :ubyte part, the declaration of y would fail.
Similarly, this would fail:
enum ZoneMember : ubyte {
One = 1,
Two = 2,
ThreeThousand = 3000, // Error: cannot implicitly convert
expression 3000 of type int to ubyte
}
-Steve