better-enums/README.md
Anton Bachin ccc7858f14 Ported to Microsoft Visual Studio.
Worked around a bug with vararg macro expansion in VC++ and tested with Visual
Studio 2013. This commit does not include exhaustive tests for that compiler as
for clang and gcc. They are coming in a follow-on commit.

https://connect.microsoft.com/VisualStudio/feedback/details/521844/variadic-macro-treating-va-args-as-a-single-parameter-for-other-macros
2015-05-27 13:20:14 -05:00

2.1 KiB
Raw Blame History

Better Enums

Reflective compile-time C++ enum library with clean syntax. For example:

ENUM(Channel, int, Red = 1, Green, Blue)

defines a type Channel. You can then do natural things such as:

Channel channel = Channel::Green;

channel._to_string();           // Results in the string "Green"
channel._to_integral();         // Results in the int 2

Channel::_from_string("Red");   // Results in Channel::Red
Channel::_from_integral(3);     // Results in Channel::Blue

constexpr auto channel = Channel::_from_integral(3);
                                // Do it at compile time (C++11 only)

for (Channel channel : Channel::_values()) {
    // Iterate over all channels
}

...and more. See the project page.

Installation

Simply add enum.h to your project.

Features

  • Requires no external utility.
  • Safe conversions to/from integers and strings.
  • Iteration over declared values.
  • Switch case checking.
  • All operations are constexpr and can be used at compile time in your own constexpr code. See demos on the project page for how to define default values, for example.
  • Constant values can be initialized with expressions (Red = 1) and aliased (Favorite = Green), just like with built-in enums.
  • Generating a large number of enums is about as fast as including a typical standard header like iostream performance test included.
  • Explicit choice of underlying representation type.
  • Header-only.
  • No dependencies besides the standard library.
  • Tested on gcc 4.3 to 5.1, clang 3.3 to 3.6, and VS2013.

Contact

Don't hesitate to contact me about features (or bugs!): antonbachin@yahoo.com

License

Better Enums is released under the BSD 2-clause license. See LICENSE.

History

The library was originally developed by the author in the winter of 2012-2013 at Hudson River Trading, as a replacement for an older generator called BETTER_ENUM.