Есть ли способ получить случайным образом из класса enum в C ++? - PullRequest
2 голосов
/ 23 мая 2019

Я хочу заполнить переменную случайным элементом из класса enum.

Итак, я попытался установить тип класса перечисления в 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 Ответ

2 голосов
/ 23 мая 2019

Операнды встроенного оператора по модулю (%) должны быть целыми или с незаданной областью тип перечисления.

Enumerator - это scoped перечисление .

Не существует неявных преобразований значений перечислителя с ограничениями в целочисленные типы.
Поэтому для получения числового значения необходимо использовать static_castзначение перечислителя.

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