
----- Original Message ----- From: "Daniel James" <daniel_james@fmail.co.uk> To: <boost@lists.boost.org> Sent: Friday, March 06, 2009 12:39 PM Subject: Re: [boost] [C++0x] Emulation of scoped enums
2009/3/6 vicente.botet <vicente.botet@wanadoo.fr>:
I don't think there is a better solution. You need to mask the fact that a enum type in C++0x is name scope and a type and can not be in C++03.
A class is a name scope and a type - isn't that why it's called 'enum class'?
class algae { public: enum value {green, red, cyan};
algae() {} algae(value v) : v_(v) {}
// And any other required methods... private: value v_; };
algae x = algae::red; algae y = red; // error...
This would also be closer to 'enum class' as it's strongly typed.
Beman's preprocessing syntax would have to change, as the closing macro would have to know the name. The syntax using a preprocessor sequence or varargs would be the same.
Hi, The generated code of the macro can generate this or what Beman proposed. In any case the _START, _END will be needed. I like your solution because it allows to create a different type. I think that in addition it would be great to allows the storage type to be an integer type other that the enum value (emulation of the enum_base) In order to recall as much as possible the C++0X syntax enum class algae {green, red, cyan }; enum class mycolors : unsigned char {green, red, cyan }; what about BOOST_ENUM_CLASS_START(algae) { green, red, cyan }; BOOST_ENUM_CLASS_END BOOST_GENERIC_ENUM_CLASS_START(algae, unsigned char) { green, red, cyan }; BOOST_ENUM_CLASS_END And use BOOST_ENUM_CLASS(algae)? Best, Vicente Best, Vicente