在功能之间切换的最佳(或标准)方式是什么?
What is the best (or standard) way of switching between functions?
下面的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;
}
您可以使用函数指针数组,如下所示:
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<int(int)>
作为数组的项类型,这样您就可以在数组中使用 lambda,而不仅仅是命名函数,即使有闭包。
下面的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;
}
您可以使用函数指针数组,如下所示:
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<int(int)>
作为数组的项类型,这样您就可以在数组中使用 lambda,而不仅仅是命名函数,即使有闭包。