| example | ||
| include | ||
| test | ||
| .appveyor.yml | ||
| .gitignore | ||
| .travis.yml | ||
| CMakeLists.txt | ||
| LICENSE | ||
| README.md | ||
Magic Enum C++
__ __ _ ______ _____
| \/ | (_) | ____| / ____|_ _
| \ / | __ _ __ _ _ ___ | |__ _ __ _ _ _ __ ___ | | _| |_ _| |_
| |\/| |/ _` |/ _` | |/ __| | __| | '_ \| | | | '_ ` _ \ | | |_ _|_ _|
| | | | (_| | (_| | | (__ | |____| | | | |_| | | | | | | | |____|_| |_|
|_| |_|\__,_|\__, |_|\___| |______|_| |_|\__,_|_| |_| |_| \_____|
__/ |
|___/
What is Magic Enum?
Header-only C++17 library provides Enum-to-String and String-to-Enum functions.
magic_enum::enum_to_stringobtains string enum name from enum variable.magic_enum::enum_from_stringobtains enum value from enum string name.magic_enum::enum_to_sequenceobtains value enum sequence.magic_enum::enum_to_string_sequenceobtains string enum name sequence.
Features
- C++17
- Header-only
- Dependency-free
- Compile-time
- Enum to string
- String to enum
Examples
-
Enum variable to string enum name
auto color = Color::RED; auto color_name = magic_enum::enum_to_string(color); if (color_name.has_value()) { // color_name.value() -> "RED" } -
Static storage enum variable to string enum name
constexpr auto color = Color::BLUE; constexpr auto color_name = magic_enum::enum_to_string<color>(); if (color_name.has_value()) { // color_name.value() -> "BLUE" } -
String enum name to enum value
constexpr auto color = magic_enum::enum_from_string<Color>("GREEN"); if (color.has_value()) { // color.value() -> Color::GREEN } -
Enum to value sequence
constexpr auto colors = magic_enum::enum_to_sequence<Color>(); // colors -> {Color::RED, Color::BLUE, Color::GREEN} -
Enum to string enum name sequence
constexpr auto color_names = magic_enum::enum_to_string_sequence<Color>(); // color_names -> {"RED", "BLUE", "GREEN"}
Remarks
-
magic_enum::enum_to_stringreturnsstd::optional<std::string_view>, usinghas_value()to check contains enum name andvalue()to get the enum name. If enum value does not have name or out of rangeMAGIC_ENUM_RANGE, returnsstd::nullopt. -
magic_enum::enum_from_stringreturnsstd::optional<E>, usinghas_value()to check contains enum value andvalue()to get the enum value. If enum value does not have name or out of rangeMAGIC_ENUM_RANGE, returnsstd::nullopt. -
magic_enum::enum_to_sequencereturnsstd::array<E, N>with all value enum, sorted by enum value. -
magic_enum::enum_to_string_sequencereturnsstd::array<std::string_view, N>with all string enum name, sorted by enum value. -
Enum value must be in range
(-MAGIC_ENUM_RANGE, MAGIC_ENUM_RANGE). By defaultMAGIC_ENUM_RANGE = 128. If you need larger range, redefine the macroMAGIC_ENUM_RANGE.#define MAGIC_ENUM_RANGE 1028 // Redefine MAGIC_ENUM_RANGE for larger range. #include <magic_enum.hpp>
Integration
You should add the required file magic_enum.hpp.
Compiler compatibility
- Clang/LLVM >= 5
- Visual C++ >= 15.3 / Visual Studio >= 2017
- Xcode >= 10.2
- GCC >= 9