在switch语句中重复代码

Chr*_*ann 4 php c++

我得到并切换这样的语句:

switch(x){
    case a:
         executeSth();
         executeA();
    break;
    case b:
         executeSth();
         executeB();
    break;
    ...
}
Run Code Online (Sandbox Code Playgroud)

所以executeSth(); 应该总是执行,除非在默认情况下,但在它之后调用一些特定于案例的代码(executeA();或executeB()等).(所以简单地将它放在开关前面是行不通的).

有没有一种有效的方法来减少"executeSth();"的数量 在不牺牲性能的情况下?

我只能想象将它分成两个开关(一个执行executeSth()和一个执行特定代码)但这会牺牲性能.也许你有更好的想法?

我基本上习惯于c/c ++或php的代码.我的目标是最小化代码大小,并在c/c ++的情况下最小化生成的可执行文件的大小.

编辑:是的,功能的顺序很重要.Edit2:我没有php或c ++之间的选择,我需要它尽可能好.

Gli*_*ire 7

嵌套switch是一个选项......

这使用了两个开关,但第二个没有在这种default情况下触发,因此比两个内嵌开关具有稍好的性能配置.

switch($x) {
    case a: case b: case c:
        executeSth();
        switch($x) {
            case a:
                executeA();
                break;
            case b:
                executeB();
                break;
            case c:
                executeC();
                break;
        }
        break;
    default:
        ...
}
Run Code Online (Sandbox Code Playgroud)

或者,可变函数可以完成工作......

这是一个可以使用的PHP选项,尽管很多人不喜欢变量函数.如果您想完全删除嵌套和重复,这可能是最佳选择.

switch($x) {
    case a:
        $function = "executeA";
        break;
    case b:
        $function = "executeB";
        break;
    case c:
        $function = "executeC";
        break;
    default:
        ...
}

if(isset($function)) {
    executeSth();
    $function();
}
Run Code Online (Sandbox Code Playgroud)

我还做了一个小住在这里试验台,如果有人想测试他们的PHP解决方案发布之前的工作(case 10executeSth()executeA(),case 20executeSth()executeB(),defaultexecuteDefault()).

在C++中,您可以使用函数指针实现与上面相同的操作

当我写这篇文章的时候,我有一个完全的大脑放屁,谢天谢地提醒我,我们可以使用一个简单的函数指针来做到这一点.

// Declare function pointer
int (*functionCall)() = NULL;

// In switch statement, assign something to it
functionCall = &execute;

// After the switch statement, call it
int result = (*functionCall)();
Run Code Online (Sandbox Code Playgroud)

注意:我出去所以没有检查这些语法.我使用的语法是C语法,可能需要一些小的更改才能在C++中工作.