c++ - 如何在一个switch中实现多个case的一些独占语句和一些公用语句?

标签 c++ c switch-statement goto

我有一个 switch 语句,其中每个案例都有唯一的代码,并且一些代码在除默认标签之外的所有案例之间共享。 有没有一种在不同 case 标签之间共享命令的好方法?

编辑:代码示例

switch (c)
{
    case '+':
        command.type = ADD;
        commands.push_back(command);
        break;
    case '-':
        command.type = SUB;
        commands.push_back(command);
        break;
    case '>':
        command.type = INC;
        commands.push_back(command);
        break;
    case '<':
        command.type = DEC;
        commands.push_back(command);
        break;
    case '.':
        command.type = PUT;
        commands.push_back(command);
        break;
    case ',':
        command.type = GET;
        commands.push_back(command);
        break;
    default: break;

最佳答案

保留 std::mapcharcommand.type 的任何类型。
我们称它为 command_table

然后:

switch (c)
{
    case '+':
    case '-':
    case '>':
    case '<':
    case '.':
    case ',':
        command.type = command_table[c];
        commands.push_back(command);
        break;
    default: break;
}

或者,更短并且有一个额外的好处,那就是更难忘记一个案例:

auto it = command_table.find(c);
if (it != command_table.end())
{
    command.type = it.second;
    commands.push_back(command);
}

关于c++ - 如何在一个switch中实现多个case的一些独占语句和一些公用语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43545618/

相关文章:

c - execvp 出现段错误

c++ - 跟踪z3::优化unsat_core

c++ - 无法从 Windows 7 访问 Linux UDP 服务器

c++ - 如何重构 C++ 代码以支持动态数组大小

c++ - 将 Crashpad 与 MacOS Qt 应用程序集成

c - 如何在没有0x0d的情况下在C中输出0x0a?

c++ - 使用AVRstudi基于ATMega8的计算器

java - 默认情况在进入 switch-case 之前就被执行

java - 将线程与 paint java 一起使用

java - 在一年中添加天数 - Java