繁体   English   中英

编译时的枚举数序列

[英]Sequence of enumerators at compile time

给定一个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 ++ 11中有关类枚举的变化的一个很好的摘要。 这些解决了隐式转换,对基础类型的控制,名称范围界定,但基本性质没有变化。 枚举器仍然只是接近文字的事物,没有可发现的联系。 您需要的是某种思考,而AFAIK尚未出现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM