On Thursday, March 10, 2011 11:28:04 bearophile wrote: > useo: > > is it possible to declare a enum where all entries are instances of a > > > class (or struct), like the following: > I don't think so. Enums are compile-time constants. > This code doesn't compile: > > class A { > this(uint i) {} > } > enum myEnum : A { > entry1 = new A(0), > entry2 = new A(1) > } > void main() {} > > It's important to understand that in D OOP and procedural/C-style features > are often separated. typedef didn't work well with OOP. Don't mix things > that are not meant to be mixed.
There's absolutely nothing wrong with mixing enum with OOP. An enum is simply an enumeration of values. There's absolutely nothing wrong with those values being of struct or class types. The only restrictions there are problems with the implementation. TDPL even gives examples of enum structs. They currently work when you only have one value in the enum, but fail when you have multiple ( http://d.puremagic.com/issues/show_bug.cgi?id=4423 ). If/When classes work with CTFE, then you should be able to haveenums of class objects. There's nothing about enums which are C or procedural-specific. Java has object- oriented enums which are quite powerful. And aside from the current implementation issues, D's enums are even more powerful because they allow _any_ type and so can be either primitive types or user-defined types like you'd have in Java. enums don't care one way or another about OOP. They're just a set of values that have to be ordered and be known at compile time. - Jonathan M Davis