Ответ 1
int i = 1;
Test val = static_cast<Test>(i);
Как я могу привести int к перечислению в C++?
Например:
enum Test
{
A, B
};
int a = 1;
Как мне преобразовать a
в тип Test::A
?
int i = 1;
Test val = static_cast<Test>(i);
Test e = static_cast<Test>(1);
Ваш код
enum Test
{
A, B
}
int a = 1;
Решение
Test castEnum = static_cast<Test>(a);
Отвечая на заключительный вопрос, "как мне преобразовать 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);
Test castEnum = static_cast<Test>(a-1);
приведёт к A. Если вы не хотите подструктуру 1, вы можете переопределить enum
:
enum Test
{
A:1, B
};
В этом случае 'Test castEnum = static_cast (a);' может быть использован для приведения к А.