gtopt/enum_option.hpp file

Generic compile-time enum-to-string and string-to-enum framework.

Provides a reusable pattern for mapping enum values to string names and back. Each enum defines a std::to_array<EnumEntry<E>> table and an ADL enum_entries(E) customization point; the generic templates perform the lookup.

Defining a named enum

enum class Colour : uint8_t { red, green, blue };

inline constexpr auto colour_entries = std::to_array<EnumEntry<Colour>>({
    {.name = "red",   .value = Colour::red},
    {.name = "green", .value = Colour::green},
    {.name = "blue",  .value = Colour::blue},
});

constexpr auto enum_entries(Colour) noexcept
{
  return std::span {colour_entries};
}

Using a named enum

auto c = enum_from_name<Colour>("green");   // std::optional<Colour>
auto n = enum_name(Colour::blue);           // std::string_view

Namespaces

namespace gtopt

Classes

template<typename E E>
struct gtopt::EnumEntry
Name-value pair for an enumerator.