如何在C ++中随机选择枚举类型的值? 我想做这样的事情。
enum my_type(A,B,C,D,E,F,G,h,J,V);
my_type test(rand() % 10);
但这是非法的......没有从int到枚举类型的隐式转换。
答案 0 :(得分:24)
怎么样:
enum my_type {
a, b, c, d,
last
};
void f() {
my_type test = static_cast<my_type>(rand() % last);
}
答案 1 :(得分:7)
没有隐式转换,但显式转换将起作用:
my_type test = my_type(rand() % 10);
答案 2 :(得分:1)
这是我最近解决类似问题的方式。我把它放在合适的.cc文件中:
static std::random_device rd;
static std::mt19937 gen(rd());
在定义枚举的标题内:
enum Direction
{
N,
E,
S,
W
};
static std::vector<Direction> ALL_DIRECTIONS({Direction::N, Direction::E, Direction::S, Direction::W});
并生成随机方向:
Direction randDir() {
std::uniform_int_distribution<size_t> dis(0, ALL_DIRECTIONS.size() - 1);
Direction randomDirection = ALL_DIRECTIONS[dis(gen)];
return randomDirection;
}
别忘了
#include <random>