切换案例:从不可能的默认案例返回

问题描述 投票:0回答:1

如果我在函数中使用 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 更惯用,有没有一种优雅的方法来克服这个问题?

c++ switch-statement coding-style default
1个回答
0
投票

您可以利用

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){}

检查
© www.soinside.com 2019 - 2024. All rights reserved.