C++中切换调用不同函数、避免重复代码的最优/标准实现方式是什么
优化实现方案
你可以通过函数指针数组实现逻辑复用,完全去掉重复的switch分支,同时运行效率和原实现几乎一致,后续新增同类函数只需在数组中新增元素即可,可维护性更强。
核心思路是将selection值作为数组下标,直接映射到对应要调用的函数,通用逻辑(调用后返回值+2)只写一次。
优化后完整代码
#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、返回值为int的函数 using FuncPtr = int(*)(int); int primary_function(int x, int selection){ // 函数指针数组,下标对应selection值,下标0留空适配你从1开始的序号 static const FuncPtr func_list[] = {nullptr, function1, function2, function3, function4}; const int func_count = sizeof(func_list)/sizeof(func_list[0]) - 1; // 增加边界校验避免非法入参 if(selection < 1 || selection > func_count) { // 可根据你的需求自定义异常返回值或抛出异常 return -1; } // 直接调用对应函数后加2返回 return func_list[selection](x) + 2; } 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; }
其他可选方案
如果你使用C++11及更高版本,且需要兼容lambda、仿函数等更多可调用对象,也可以用std::function替换原生函数指针,灵活性更高,仅需小幅度改动:
- 引入对应头文件
#include <functional> - 替换函数指针定义为
using FuncPtr = std::function<int(int)>;
优化后运行结果和原代码完全一致,且完全消除了重复逻辑。
内容的提问来源于stack exchange,提问作者DanielMytens
相关产品推荐
相关产品推荐

