From 8114e9b1b31908b70d7c741ee1927ea1619d470f Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Fri, 5 Feb 2021 14:16:35 +0100 Subject: [PATCH] Allow iterating over enum keys/values --- include/cpptypesafeenum.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/include/cpptypesafeenum.h b/include/cpptypesafeenum.h index 17da672..49564fa 100644 --- a/include/cpptypesafeenum.h +++ b/include/cpptypesafeenum.h @@ -13,6 +13,7 @@ #define DECLARE_TYPESAFE_ENUM_HELPER1(name) name, #define DECLARE_TYPESAFE_ENUM_HELPER2(name) case TheEnum::name: return #name; #define DECLARE_TYPESAFE_ENUM_HELPER3(name) else if (str == CPP_STRINGIFY(name)) return TheEnum::name; +#define DECLARE_TYPESAFE_ENUM_HELPER4(name) cb(TheEnum::name, CPP_STRINGIFY(name)); #define DECLARE_TYPESAFE_ENUM(Name, Derivation, Values) \ enum class Name Derivation \ @@ -20,7 +21,13 @@ Values(DECLARE_TYPESAFE_ENUM_HELPER1) \ }; \ std::string toString(Name value); \ - std::optional parse##Name(std::string_view str); + std::optional parse##Name(std::string_view str); \ + template \ + void iterate##Name(T &&cb) \ + { \ + using TheEnum = Name; \ + Values(DECLARE_TYPESAFE_ENUM_HELPER4) \ + } #define IMPLEMENT_TYPESAFE_ENUM(Name, Derivation, Values) \ std::string toString(Name value) \