3.4 KiB
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 variable from enum string name.
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 variable
constexpr auto color = magic_enum::enum_from_string<Color>("GREEN"); if (color.has_value()) { // color.value() -> Color::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 variable 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 variable andvalue()to get the enum variable. If enum variable does not have name or out of rangeMAGIC_ENUM_RANGE, returnsstd::nullopt. -
Enum variable 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