One alternative way is to use a preprocessor.
#define ITERATE_MY_ENUM(_) \ _(A,) \ _(B, =3) \ _(C,) \ _(D, =10) enum MyEnum { #define DEFINE_ENUM_VALUE(key, value) key value, ITERATE_MY_ENUM(DEFINE_ENUM_VALUE) #undef DEFINE_ENUM_VALUE }; void foo() { MyEnum arr[] = { #define IN_ARRAY_VALUE(key, value) key, ITERATE_MY_ENUM(IN_ARRAY_VALUE) #udnef IN_ARRAY_VALUE }; }
Some may find this ugly, but it still stores the DRY code.
source share