mirror of
https://github.com/Neargye/magic_enum.git
synced 2026-01-10 23:44:29 +00:00
87 lines
3.4 KiB
Markdown
87 lines
3.4 KiB
Markdown
# Magic Enum C++
|
|
|
|
```text
|
|
__ __ _ ______ _____
|
|
| \/ | (_) | ____| / ____|_ _
|
|
| \ / | __ _ __ _ _ ___ | |__ _ __ _ _ _ __ ___ | | _| |_ _| |_
|
|
| |\/| |/ _` |/ _` | |/ __| | __| | '_ \| | | | '_ ` _ \ | | |_ _|_ _|
|
|
| | | | (_| | (_| | | (__ | |____| | | | |_| | | | | | | | |____|_| |_|
|
|
|_| |_|\__,_|\__, |_|\___| |______|_| |_|\__,_|_| |_| |_| \_____|
|
|
__/ |
|
|
|___/
|
|
```
|
|
|
|
[](https://github.com/Neargye/magic_enum/releases)
|
|
[](LICENSE)
|
|
[](https://travis-ci.org/Neargye/magic_enum)
|
|
[](https://ci.appveyor.com/project/Neargye/magic-enum-hf8vk/branch/master)
|
|
[](https://www.codacy.com/app/Neargye/magic_enum?utm_source=github.com&utm_medium=referral&utm_content=Neargye/magic_enum&utm_campaign=Badge_Grade)
|
|
[](https://wandbox.org/permlink/gkjJ86ur57I3KOO6)
|
|
|
|
## What is Magic Enum?
|
|
|
|
Header-only C++17 library provides Enum-to-String and String-to-Enum functions.
|
|
* `magic_enum::enum_to_string` obtains string enum name from enum variable.
|
|
* `magic_enum::enum_from_string` obtains enum variable from enum string name.
|
|
|
|
## Features
|
|
|
|
* C++17
|
|
* Header-only
|
|
* Dependency-free
|
|
* Compile-time
|
|
* Enum to string
|
|
* String to enum
|
|
|
|
## [Examples](example/example.cpp)
|
|
|
|
* Enum variable to string enum name
|
|
```cpp
|
|
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
|
|
```cpp
|
|
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
|
|
```cpp
|
|
constexpr auto color = magic_enum::enum_from_string<Color>("GREEN");
|
|
if (color.has_value()) {
|
|
// color.value() -> Color::GREEN
|
|
}
|
|
```
|
|
|
|
## Remarks
|
|
|
|
* `magic_enum::enum_to_string` returns `std::optional<std::string_view>`, using `has_value()` to check contains enum name and `value()` to get the enum name. If enum variable does not have name or out of range `MAGIC_ENUM_RANGE`, returns `std::nullopt`.
|
|
|
|
* `magic_enum::enum_from_string` returns `std::optional<E>`, using `has_value()` to check contains enum variable and `value()` to get the enum variable. If enum variable does not have name or out of range `MAGIC_ENUM_RANGE`, returns `std::nullopt`.
|
|
|
|
* Enum variable must be in range `(-MAGIC_ENUM_RANGE, MAGIC_ENUM_RANGE)`. By default `MAGIC_ENUM_RANGE = 128`. If you need larger range, redefine the macro `MAGIC_ENUM_RANGE`.
|
|
```cpp
|
|
#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](include/magic_enum.hpp).
|
|
|
|
## Compiler compatibility
|
|
|
|
* Clang/LLVM >= 5
|
|
* Visual C++ >= 15.3 / Visual Studio >= 2017
|
|
* Xcode >= 10.2
|
|
* GCC >= 9
|
|
|
|
## Licensed under the [MIT License](LICENSE)
|