Re: New strongly type enum proposal featuring inherited enums
On 2011-08-17 05:28, Phil Bouchard wrote:
Hi,
Is it too late to change the strongly type enum?
Yes, the ISO standard C++11 is accepted.
I have a proposal
that is much cleaner than what is on its way.
Right now we have:
enum class Val: unsigned long { E1, E2, E3, E4 };
Comments:
1) This design is bad because the ':' sign is reserved for inheritance.
I disagree. First, ':' is only "reserved" for inheritance for class
types, second, even, if we look at it similar to class types I don't
consider the current state as incorrect, because we can (conceptually)
consider an enum to "derive from" an underlying type.
2) Inheriting from another enum would be quite useful. For example:
enum class Widget {button, combobox, listview};
enum class SuperWidget : Widget {iconview}
The current state would not disallow such an extension in the future,
so what is the problem?
This way iconview would be equal to 3, not 0.
Maybe, that would depend on an actual proposal that describes the
semantics in this way.
3) Redefining the underlying type could be easily done with:
enum class Val { unsigned long E1, E2, E3, E4 };
This is much more neat and is similar to a declaration of multiple
instances:
const unsigned long E1, E2, E3, E4;
I don't consider this alternative as superior as the current state. To
me it looks, as if Ei (i=1-4) are data members of Val. It would imply
to me that I could write
enum class Val { unsigned long E1; unsigned long E2; unsigned long E3,
unsigned long E4; };
Does that mean that we could also use different underlying types for
individual enumerator values?
HTH & Greetings from Bremen,
- Daniel Kr?gler
--
[ comp.std.c++ is moderated. To submit articles, try posting with your ]
[ newsreader. If that fails, use mailto:std-cpp-submit@vandevoorde.com ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html ]