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

How to pick up a random value from an enum class?

你好,

最近接触了 C++(准确地说是 C++14),我正在尝试使用枚举,但在解决问题时仍然遇到了一些麻烦
目前,试图从这样构造的枚举 class 中获取随机值:

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

这里是“niveau.def”的内容

NIVEAU_DEF(I, 1)
NIVEAU_DEF(II, 2)
...
NIVEAU_DEF(IX, 9)
NIVEAU_DEF(X, 10)

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

因为您已经有了一个 XMacro,您可以重复使用它来创建一个值数组并从中选择:

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

在较新版本的语言中,您可以使用 std::array.

使其成为一个很好的 constexpr
constexpr std::array niveau_vals = {
  #define NIVEAU_DEF(NOM,VALEUR) Niveau::VALEUR,
  #include "niveau.def"
  #undef NIVEAU_DEF
};