给定一个 C++11 枚举类,是否有一些模板或其他构造可以在编译时迭代所有枚举器的集合?可以定义一个模板,例如用该枚举类型的所有可能值初始化一个数组?
最佳答案
另一种技术是求助于预处理器。
#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
};
}
有些人可能认为它很丑,但它仍然保留代码 DRY .
关于c++ - 编译时的枚举数序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17195352/