enum with classes/structs

useo useo at start.bg
Fri Mar 11 01:32:46 PST 2011


== Auszug aus Jonathan M Davis (jmdavisProg at gmx.com)'s Artikel
> 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

Okay, thanks - I'll hope the bug will be solved. I'm absolution
right here with you, the enumerations of Java are very use- and
powerful.


More information about the Digitalmars-d-learn mailing list