Deb*_*ger 2 c c++ goto switch-statement
我有一个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;
Run Code Online (Sandbox Code Playgroud)
mol*_*ilo 11
保持一个std::map从char任何类型command.type.
我们称之为command_table.
然后:
switch (c)
{
case '+':
case '-':
case '>':
case '<':
case '.':
case ',':
command.type = command_table[c];
commands.push_back(command);
break;
default: break;
}
Run Code Online (Sandbox Code Playgroud)
或者,更短,并且额外的好处是忘记案件更难:
auto it = command_table.find(c);
if (it != command_table.end())
{
command.type = it.second;
commands.push_back(command);
}
Run Code Online (Sandbox Code Playgroud)
类似于以下内容:
bool MyPushBackFlag = true;
switch (c)
{
case '+':
command.type = ADD;
break;
case '-':
command.type = SUB;
break;
case '>':
command.type = INC;
break;
case '<':
command.type = DEC;
break;
case '.':
command.type = PUT;
break;
case ',':
command.type = GET;
break;
default: MyPushBackFlag = false; break;
}
if (MyPushBackFlag)
commands.push_back(command);
Run Code Online (Sandbox Code Playgroud)