c++ - 编译时的枚举数序列

标签 c++ c++11 enums enum-class

给定一个 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/

相关文章:

c++ - while( cin >> value ) 在我输入一个字符时打破循环

c++ - std::unique_ptr 用于需要免费的 C 函数

c++ - Eigen 与 Matlab : parallelized Matrix-Multiplication

java - 填充所有状态值的摘要计数

swift - 对 Enum 的成员 'init(from:)' 的引用不明确

c++ - 存储函数调用和稍后调用的参数列表

c++ - QMessageLogger 魔法是如何工作的?

javascript - WebAssembly.instantiate 既没有调用,也没有在 v8 嵌入中捕获

c++ - 非线程安全环境中的多线程

java - 在 EnumSet 和 boolean 值数组之间转换