enable declare parse format count iterate switch safe cast during compilation
#include <enum.h>
BETTER_ENUM(Channel, int, Red = 1, Green, Blue)
Channel c = Channel::_from_string("Red");
const char *s = c._to_string();
size_t n = Channel::_size();
for (Channel c : Channel::_values()) {
run_some_function(c);
}
switch (c) {
case Channel::Red: // ...
case Channel::Green: // ...
case Channel::Blue: // ...
}
Channel c = Channel::_from_integral(3);
constexpr Channel c =
Channel::_from_string("Blue");
$be is a single, lightweight header file that makes your compiler generate reflective enum types.
That means you can easily convert enums to and from strings, validate them, and loop over them. In $cxx11, you can do it all at compile time. It's what built-in enums ought to support. Better Enums simply adds the missing features. And, it is based on the best known techniques, thoroughly tested, fast, portable, and documented exhaustively. To use it, just includeenum.h.
Try it live online in
[Wandbox](http://melpon.org/wandbox/permlink/6kFervewqeDsNAGu), or begin the
[tutorial](${prefix}tutorial/HelloWorld.html)!
### Highlights
enums.
Internal members have underscores to avoid clashing with your constant
names.
enum.h. There are no objects or libraries to link with.
enum.h. It's a metaprogram executed by your
compiler.
switch
Use a Better Enum like a built-in enum, and still have the
compiler do case checking.
switch statements for
converting enums to strings.
Count constant and assuming a dense range.
iostream. enum.h is only slightly more than 1000
lines long.
constexpr functions.
std::cout or use
boost::lexical_cast.