Как сделать int для перечисления на С++? - программирование
Подтвердить что ты не робот

Как сделать int для перечисления на С++?

Как я могу привести int к перечислению в C++?

Например:

enum Test
{
    A, B
};

int a = 1;

Как мне преобразовать a в тип Test::A?

4b9b3361

Ответ 1

int i = 1;
Test val = static_cast<Test>(i);

Ответ 2

Test e = static_cast<Test>(1);

Ответ 3

Ваш код

enum Test
{
    A, B
}

int a = 1;

Решение

Test castEnum = static_cast<Test>(a);

Ответ 4

Отвечая на заключительный вопрос, "как мне преобразовать a в тип Test::A", вместо того, чтобы быть жестким по поводу необходимости иметь там актерский состав, и ответить на несколько лет позже, просто это кажется популярным вопросом, который, похоже, еще никто не задавал упомянул альтернативу, согласно стандарту С++ 11:

5.2.9 Статическое приведение

... выражение e может быть явно преобразовано в тип T используя static_cast формы static_cast<T>(e), если декларация T t(e); правильно сформирован для некоторой изобретенной временной переменной t (8.5). Эффект такого явного преобразования такой же, как выполнение объявление и инициализация, а затем с использованием временного переменная в результате преобразования.

Поэтому прямое использование формы t(e) также будет работать, и вы можете предпочесть ее для аккуратности:

auto result = Test(a);

Ответ 5

Test castEnum = static_cast<Test>(a-1); приведёт к A. Если вы не хотите подструктуру 1, вы можете переопределить enum:

enum Test
{
    A:1, B
};

В этом случае 'Test castEnum = static_cast (a);' может быть использован для приведения к А.