Better Enums

Reflective compile-time enums for C++

Open-source under the BSD license

Version 0.11.1

To install, just add enum.h to your project.

Visit the GitHub repo for issues, feedback, and the latest development.

Download enum.h GitHub
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");

Better Enums 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 C++11, 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 include enum.h.

Try it live online in Wandbox, or begin the tutorial!

Highlights

Documentation