pitfalls of enum
Ali Çehreli
acehreli at yahoo.com
Thu Nov 14 15:34:42 PST 2013
On 11/02/2013 02:14 PM, JR wrote:
> But in Andrei's thread on tristates[2] he lists this code excerpt:
>> struct Tristate
>> {
>> private static Tristate make(ubyte b)
>> {
>> Tristate r = void;
>> r.value = b;
>> return r;
>> }
>>
>> enum no = make(0), yes = make(1), unknown = make(4); // <---
>
> Is it okay to use enum there? If so, is it because (whatwith being a
> struct) it's not on the heap?
I think it is more like because its value is known at compile time. If
Tristate were a class, then the class variable r would not have any
class object that it pointed to.
> What if it were a class?
I tried changing struct to class:
class Tristate
{
ubyte value;
private static Tristate make(ubyte b)
{
Tristate r = new Tristate();
r.value = b;
return r;
}
enum no = make(0), yes = make(1), unknown = make(4);
}
Error: variable deneme.Tristate.no : Unable to initialize enum with
class or pointer to struct. Use static const variable instead.
So, class can't work.
> A string?
That would be ok. A compile-time string is known to the compiler and can
appear in the program binary to be referenced from multiple places.
> A
> string instantiated with the value of another string, which would
> normally simply create an alias?
Would work.
> When is an enum *better* than a normal (static const/immutable) constant?
Good question. :)
Ali
More information about the Digitalmars-d-learn
mailing list