You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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替换原生函数指针,灵活性更高,仅需小幅度改动:

  1. 引入对应头文件 #include <functional>
  2. 替换函数指针定义为 using FuncPtr = std::function<int(int)>;

优化后运行结果和原代码完全一致,且完全消除了重复逻辑。

内容的提问来源于stack exchange,提问作者DanielMytens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 15:18:07