mirror of
https://github.com/aantron/better-enums.git
synced 2025-12-06 16:56:42 +08:00
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
2.1 KiB
2.1 KiB
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
constexprand can be used at compile time in your ownconstexprcode. 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.