One alternative technique is to resort to the pre-processor.
#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 consider it ugly, but it still keeps the code DRY.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…