генерация случайных чисел - PullRequest
12 голосов
/ 08 июня 2010

Как выбрать случайным образом значение для типа enum в C ++?Я хотел бы сделать что-то вроде этого.

enum my_type(A,B,C,D,E,F,G,h,J,V);
my_type test(rand() % 10);

Но это недопустимо ... неявное преобразование из типа int в тип enum отсутствует.

Ответы [ 3 ]

24 голосов
/ 08 июня 2010

Как насчет:

enum my_type {
    a, b, c, d,
    last
};

void f() {
    my_type test = static_cast<my_type>(rand() % last);
}
8 голосов
/ 08 июня 2010

Нет неявного преобразования, но будет работать явное:

my_type test = my_type(rand() % 10);
1 голос
/ 24 июня 2019

Вот как я недавно решил похожую проблему.Я помещаю это в соответствующий файл .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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...