Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
enum Flags { good=0, fail=1, bad=2, eof=4 };
constexpr int operator|(Flags f1, Flags f2) {
return Flags(int(f1)|int(f2));
}
void f(Flags x)
{
switch (x) {
case bad: /* ... */ break;
case eof: /* ... */ break;
case bad|eof: /* ... */ break;
default: /* ... */ break;
}
}
enum Flags { good=0, fail=1, bad=2, eof=4 };
/* ВНИМАНИЕ! Оператор & для типа Flags используется как конъюнкция, а не в обычном смысле дизъюнкции */
constexpr int operator&(Flags f1, Flags f2) {
return Flags(int(f1)|int(f2));
}
void f(Flags x)
{
switch (x) {
case bad: /* ... */ break;
case eof: /* ... */ break;
/* Теперь это выражение выглядит логичным, по меньшей мере в switch/case */
case bad&eof: /* ... */ break;
default: /* ... */ break;
}
}...
case (bad,eof):
...
constexpr int operator|, это никак не отразится на работоспособности.Читая посты на Хабре, наткнулся на такой вопрос
Switch для двух параметров в С++