有什么办法可以从C ++中的枚举类中获取随机值吗?

时间:2019-05-23 02:50:50

标签: c++ c++11 random enum-class

我想用枚举类中的随机元素填充变量。

因此,我尝试将枚举类类型设置为int并将最后一个枚举从枚举类传递给rand:

enum class Enumerator: int
{
    en1=0,
    en2,
    en3,
    ensCount
};

int main()
{
    srand(time(NULL));
    auto a=static_cast<Enumerator>(rand()%Enumerator::ensCount);
    return 0;
}

结果为“不匹配«operator%»(操作数类型为«int»和«Enumerator»)”。

1 个答案:

答案 0 :(得分:2)

内置模(%)运算符的操作数应为整数或 unscoped 枚举类型。

Enumeratorscoped enumeration

没有从范围内的枚举数的值到整数类型的隐式转换。
因此,您必须使用static_cast来获取枚举器的数值。

int divisor = static_cast<int>(Enumerator::ensCount);
srand(time(NULL));
auto a = static_cast<Enumerator>(rand() % divisor);