From 418cf896e399aae3916ade7b37a3d92b1e8bc9a5 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Sat, 23 Jan 2021 02:06:44 +0100 Subject: [PATCH] enum helper methods in cpp file --- esputils.h | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) 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 {