generating random enums
How do I randomly select a value for an 开发者_运维知识库enum type in C++? I would like to do something like this.
enum my_type(A,B,C,D,E,F,G,h,J,V);
my_type test(rand() % 10);
But this is illegal... there is not an implicit conversion from int to an enum type.
How about:
enum my_type {
a, b, c, d,
last
};
void f() {
my_type test = static_cast<my_type>(rand() % last);
}
There is no implicit conversion, but an explicit one will work:
my_type test = my_type(rand() % 10);
Here is how I solved a similar problem recently. I put this in an appropiate .cc file:
static std::random_device rd;
static std::mt19937 gen(rd());
Inside the header that defines the enum:
enum Direction
{
N,
E,
S,
W
};
static std::vector<Direction> ALL_DIRECTIONS({Direction::N, Direction::E, Direction::S, Direction::W});
And to generate a random direction:
Direction randDir() {
std::uniform_int_distribution<size_t> dis(0, ALL_DIRECTIONS.size() - 1);
Direction randomDirection = ALL_DIRECTIONS[dis(gen)];
return randomDirection;
}
Don't forget to
#include <random>
精彩评论