【问题标题】:What is the best (or standard) way of switching between functions?在功能之间切换的最佳(或标准)方式是什么?
【发布时间】:2022-01-11 03:35:13
【问题描述】:

下面的 C++ 代码是我想要做的简化版本,只是为了显示一般结构。

在“primary_function()”的每种情况下,结构都是相同的:

函数() + 2

唯一改变的是使用的函数(函数 1、2、3 或 4)。

有没有更有效的方法来做到这一点,这样我就不会在每种情况下都“重复”代码?谢谢。

#include <iostream>

using namespace std;

int function1(int a){
    return a;
}

int function2(int b){
    return b*b;
}

int function3(int c){
    return c*c + c;
}

int function4(int d){
    return 5*d;
}

int primary_function(int x, int selection){

    switch(selection){
        case(1):
            return function1(x) + 2;
            break;
        case(2):
            return function2(x) + 2;
            break;
        case(3):
            return function3(x) + 2;
            break;
        case(4):
            return function4(x) + 2;
            break;
    }
}



int main(){

    cout << primary_function(6,1) << endl;
    cout << primary_function(6,2) << endl;
    cout << primary_function(6,3) << endl;
    cout << primary_function(6,4) << endl;
    
    return 0;
}

【问题讨论】:

  • 使用类和虚拟成员?
  • 您可以将指向函数的指针存储在数组中。
  • 另一种方法是使用地图
  • 您可以使用查找表:&lt;selection_id, function_ptr&gt;。

标签: c++ function switch-statement


【解决方案1】:

您可以按如下方式使用函数指针数组:

int primary_function(int x, int selection) {

    using fn_ptr_t = int (*)(int);
    static fn_ptr_t functions[] = {
        function1,
        function2,
        function3,
        function4
    };

    return functions[selection - 1](x) + 2;
}

您还可以使用 std::function&lt;int(int)&gt; 作为数组的项类型,这将允许您在数组中使用 lambda,即使是闭包,而不仅仅是命名函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多