Какова ваша процедура при переключении перечисления, где каждое перечисление покрывается случаем? В идеале вы хотели бы, чтобы код был в будущем доказательством, как вы это делаете?
Кроме того, что, если какой-то идиот бросает произвольный int в тип перечисления? Следует ли рассматривать эту возможность? Или мы должны предположить, что такая вопиющая ошибка попала бы в обзор кода?
enum Enum
{
Enum_One,
Enum_Two
};
Special make_special( Enum e )
{
switch( e )
{
case Enum_One:
return Special( /*stuff one*/ );
case Enum_Two:
return Special( /*stuff two*/ );
}
}
void do_enum( Enum e )
{
switch( e )
{
case Enum_One:
do_one();
break;
case Enum_Two:
do_two();
break;
}
}
- оставьте случай по умолчанию, gcc предупредит вас (будет визуальная студия?)
- добавить случай по умолчанию с
assert(false)
; - добавьте случай по умолчанию, который выдает исключение catchable
- добавьте случай по умолчанию, который выдает исключение, исключающее исключение (это может быть просто политикой, чтобы никогда не поймать ее или не перевернуть).
- что-то лучшее, что я не рассматривал
Мне особенно интересно, почему вы решили сделать это так, как вы.