diff --git a/esputils.h b/esputils.h index 93ecac6..ab97b49 100644 --- a/esputils.h +++ b/esputils.h @@ -5,6 +5,8 @@ #include #include #include +#include +#include /* Avoid "unused parameter" warnings @@ -43,26 +45,26 @@ { \ Values(DECLARE_TYPESAFE_ENUM_HELPER1) \ }; \ - namespace { \ - template \ - T toString(Name value) \ + std::string toString(Name value); \ + std::optional parse##Name(std::string_view str); + +#define IMPLEMENT_TYPESAFE_ENUM(Name, Derivation, Values) \ + std::string toString(Name value) \ { \ switch (value) \ { \ using TheEnum = Name; \ Values(DECLARE_TYPESAFE_ENUM_HELPER2) \ } \ - return T{"Unknown " #Name "("} + int(value) + ')'; \ + return std::string{"Unknown " #Name "("} + std::to_string(int(value)) + ')'; \ } \ - template \ - std::optional parse##Name(const T &str) \ + std::optional parse##Name(std::string_view str) \ { \ using TheEnum = Name; \ if (false) {} \ Values(DECLARE_TYPESAFE_ENUM_HELPER3) \ return std::nullopt; \ - } \ - } // namespace + } namespace espcpputils {