如果我在函数中使用 switch case,并且默认情况不应该发生,但我必须返回一些东西,该怎么办?
我尝试编写一些元胞自动机,其中有两种可能的细胞状态:
ALIVE
和DEAD
。代码看起来像这样?
State find_next_cell_state(const Cell& cell, State current_state)
{
switch (current_state)
{
case ALIVE:
// Blah Blah...
case DEAD:
// Blah Blah...
default: // Should never reach here unless I make a mistake.
// What to add here? Throw an Exception? Return garbage?
}
}
抛出异常的问题在于,断言似乎更适合检查此类内容,但将断言放在最后似乎并不正确。归还一些垃圾似乎也不是明智之举。
由于我发现在这种情况下 switch case 比 if-else 更惯用,有没有一种优雅的方法来克服这个问题?
您可以利用
std::optional
。
std::optional<State> find_next_cell_state(const Cell& cell, State current_state)
{
switch (current_state)
case ALIVE:
// Blah Blah...
case DEAD:
// Blah Blah...
default: return {};
}
然后您可以使用
auto obj = find_next_cell_state(/*pass the args*/); if(obj){}
检查