Страницы

Поиск по вопросам

вторник, 9 октября 2018 г.

Перечисления “enum class”

Новый стандарт С++ дает возможность использовать новый тип перечислений, лично для меня это намного удобнее старых обычных enum "перечислений", но есть одна проблема - она очень не удобна лично для меня, вот пример и суть проблемы:
enum class Colors: DWORD { RED = 0xFFFF0000, GREEN = 0xFF00FF00 ... }
Начинаю использовать:
void draw2DBox(DWORD col) { ...//Не важно что здесь }
int main() { draw2DBox(Colors::RED )//Компилятор считает Colors::RED как какой-то объект а не член типа DWORD return 0; }
Приходится делать приведение типов:
int main() { draw2DBox((DWORD)Colors::RED )//Так компилируется - но это жутко не удобно return 0; }
Может можно как-то обойтись без приведения типов?
UPD:
Использую VS 2015


Ответ

Не работает, не должно работать и не будет работать.
Идеей введения enum class была изолированность его значений и видимость особого типа. Неявное приведение для него недоступно by design:
http://ideone.com/QQkRvZ
enum class test : int { value = 0 };
int main() { test t = 0; return test::value; }
prog.cpp: In function 'int main()': prog.cpp:11:11: error: cannot convert 'int' to 'test' in initialization test t = 0; ^ prog.cpp:12:15: error: cannot convert 'test' to 'int' in return return test::value; ^

Комментариев нет:

Отправить комментарий