-
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathEnum.mpp
More file actions
29 lines (21 loc) · 787 Bytes
/
Enum.mpp
File metadata and controls
29 lines (21 loc) · 787 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
export module CppUtils.Type.Enum;
import std;
export namespace CppUtils::Type::Enum
{
using namespace std::literals;
template<class Enum>
constexpr auto Values = std::make_tuple();
template<auto enumValue>
constexpr auto Name = "Unknown"sv;
template<class Enum>
[[nodiscard]] inline constexpr auto toString(Enum value) -> decltype(auto)
{
constexpr auto nbValues = std::tuple_size_v<decltype(Values<Enum>)>;
static_assert(nbValues != 0, "Values<T> doit être spécialisé pour le type de value.");
auto string = "Unknown"sv;
[&]<std::size_t... I>(std::index_sequence<I...>) constexpr {
auto _ = ((value == std::get<I>(Values<Enum>) and (string = Name<std::get<I>(Values<Enum>)>, true)) or ...);
}(std::make_index_sequence<nbValues>{});
return string;
}
}