Здравствуйте, 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);
и навсегда забыть об ручном выписывании значений.