如何从枚举类中获取随机值?

Sim*_*reu 3 c++ random enums

你好,

最近接触了 C++(准确地说是 C++14),我试图用枚举来解决问题,
目前,尝试从构造的枚举类中获取随机值像这样:

enum class Niveau {
  #define NIVEAU_DEF(NOM,VALEUR) NOM = VALEUR,
  #include "niveau.def"
  #undef NIVEAU_DEF
};
Run Code Online (Sandbox Code Playgroud)

这是“niveau.def”的内容

NIVEAU_DEF(I, 1)
NIVEAU_DEF(II, 2)
...
NIVEAU_DEF(IX, 9)
NIVEAU_DEF(X, 10)
Run Code Online (Sandbox Code Playgroud)

是否可以使用一种方法从这些枚举中随机选取一个?或者这种构造枚举的方式不允许吗?

小智 5

由于您已经有了 XMacro,因此您可以重用它来创建值数组并从中进行选择:

const Niveau niveau_vals[] = {
  #define NIVEAU_DEF(NOM,VALEUR) Niveau::VALEUR,
  #include "niveau.def"
  #undef NIVEAU_DEF
};
Run Code Online (Sandbox Code Playgroud)

在该语言的较新版本中,您可以使用 使其成为一个很好的 constexpr std::array

constexpr std::array niveau_vals = {
  #define NIVEAU_DEF(NOM,VALEUR) Niveau::VALEUR,
  #include "niveau.def"
  #undef NIVEAU_DEF
};
Run Code Online (Sandbox Code Playgroud)