Новый стандарт С++ дает возможность использовать новый тип перечислений, лично для меня это намного удобнее старых обычных 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;
^
Комментариев нет:
Отправить комментарий