当切换一个枚举(enum)时,如果每个枚举都被case覆盖,你的过程是什么? 理想情况下,您希望代码具有未来可扩展性,如何实现?
另外,如果某些人将任意整数强制转换为枚举类型,该怎么办? 这种可能性是否应该考虑? 或者我们应该假设这样的错误会在代码审查中被发现?
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会发出警告(Visual Studio呢?)
- 添加一个默认情况,并使用
assert(false)
; - 添加一个默认情况,抛出可捕获异常;
- 添加一个默认情况,抛出不可捕获异常(可能是策略上不允许捕获或始终重新抛出)。
- 我没有考虑过的更好的方法。
我特别想知道您选择这样做的原因。