如何在无数据库场景下精简现有C++项目中的重复If-Else代码
If-Else冗余代码优化思路
你原本设想的Map方案是完全可行的,以下是几种适配你需求(无外部存储、全内置配置)的优化思路:
- 枚举映射配置表方案
把a_lFittingOption对应的枚举值作为Map的键,值存储按阈值从大到小排序的区间-返回值数组,比如[(2000.0, 1130.0), (1800.0, 930.0), (1450.0, 780.0), (870.0, 455.0)]。规则相同的枚举可以直接复用同一份配置数组,比如FitO_P_BASIC_TT_RC2和FitO_P_BASIC_TT_RC1共用同一份区间配置,避免重复存储。
通用逻辑只需要写一次:先从Map中取出当前枚举对应的区间配置,再遍历区间数组,匹配到第一个满足阈值条件的项就返回对应值即可,完全消除多层嵌套If-Else,后续新增配置只需要更新映射表,不需要修改判断逻辑。 - 策略函数映射表方案
如果后续不同枚举的判定规则可能出现非区间类的差异,可将每个枚举对应的计算逻辑封装为独立的小函数,Map的值替换为函数指针/匿名函数,相同逻辑的枚举复用同一个函数。该方案比纯配置表灵活性更高,适配规则复杂多变的场景。 - 最小改动抽离公共函数
如果是老项目不适合大改架构,可以先把重复的区间判断逻辑抽成公共工具函数,入参为dLengthComp和区间配置数组,返回匹配到的数值。原外层的If-Else分支仅需要传入对应配置数组调用公共函数即可,可快速消除90%以上的重复代码,改造成本最低。
优化注意事项:
- 所有区间配置统一按阈值从大到小排序,避免判断顺序出错
- 等于阈值的判定逻辑可以统一封装到公共匹配逻辑中,不需要每个配置分支重复写
Null(xx-xx)类的判断- 常用阈值、返回值可以抽为常量,避免硬编码出错
内容的提问来源于stack exchange,提问作者SchluppIng
相关产品推荐
相关产品推荐

