Re: operator* для enum class
От: watchmaker  
Дата: 21.09.21 09:29
Оценка: 13 (4) +1
Здравствуйте, B0FEE664, Вы писали:

BFE>Надоело писать static_cast'ы и функции для конвертации enum ---> int.


BFE>Слишком неожиданно?

BFE>Кто-нибудь так делал?

Достаточно неожиданно встретить перегрузку operator*, когда все для этих целей перегружают унарный operator+
Унарный плюс ведь уже делает integral promotion у других типов — удивления меньше.

В том числе для старых unscoped перечислений, которые были до enum class, встроенный плюс используется и работает именно таким образом:
enum Enum {
    Foo
};

void fn(Enum);
void fn(int);

void test() {
    fn(Foo);   // вызов перегрузки  void fn(Enum)
    fn(+Foo);  // вызов перегрузки  void fn(int)
}


BFE>unsigned int operator* (TestE x)

BFE>{
BFE> return TestE::a == x ? 0 : 1;
BFE>};
В эту сторону проще сделать (возможно в шаблоне для всех enum)

return static_cast<std::underlying_type_t<TestE>>(x);

и навсегда забыть об ручном выписывании значений.
Отредактировано 23.09.2021 10:35 watchmaker . Предыдущая версия . Еще …
Отредактировано 22.09.2021 20:14 watchmaker . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.