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

C++变量赋值序列优化问询:如何简化多参数重复赋值的冗余逻辑

C++代码优化方案

核心优化思路

  • 合并冗余存储:原代码中typeX_Y独立变量和list_typeX存储内容完全一致,属于重复存储,直接将同组ClassB实例统一用std::vector存储,按下标取值即可,无需单独声明每个变量
  • 消除重复函数:借助C++的std::initializer_list特性实现任意参数数量的赋值逻辑,不需要随着变量增加修改函数参数列表、新增重复的Set方法
  • 兼容原有调用:如果上层代码已有大量直接访问type1_1这类变量的逻辑,可以通过内联getter函数做兼容,无需修改上层代码

优化后代码示例

.h 文件

#include <vector>
#include <initializer_list>

class ClassA
{
public:
    // 如果必须保留原有type1_1、type1_2的访问方式,增加内联getter即可
    ClassB& type1_1() { return m_type_groups[0][0]; }
    const ClassB& type1_1() const { return m_type_groups[0][0]; }
    ClassB& type1_2() { return m_type_groups[0][1]; }
    const ClassB& type1_2() const { return m_type_groups[0][1]; }
    ClassB& type1_3() { return m_type_groups[0][2]; }
    const ClassB& type1_3() const { return m_type_groups[0][2]; }
    // type2系列同理,新增变量只需要加对应下标的getter,不用改存储逻辑

    // 通用Set方法,第一个参数是组别:0对应type1,1对应type2,以此类推
    void SetType(int group_idx, std::initializer_list<ClassB> values)
    {
        // 自动扩容组别
        if (group_idx >= m_type_groups.size()) {
            m_type_groups.resize(group_idx + 1);
        }
        // 赋值+存入vector一步完成
        m_type_groups[group_idx].assign(values);
    }

    __forceinline const std::vector<ClassB>& GetListofType(int group_idx) const { 
        static std::vector<ClassB> empty;
        return group_idx < m_type_groups.size() ? m_type_groups[group_idx] : empty; 
    }
    // 也可以保留原有GetListofType1、GetListofType2做兼容,直接调用上面的通用方法即可
    __forceinline std::vector<ClassB> GetListofType1() { return GetListofType(0); }
    __forceinline std::vector<ClassB> GetListofType2() { return GetListofType(1); }

private:
    // 二维vector:第一维是组别(type1、type2...),第二维是组内的每个ClassB实例
    std::vector<std::vector<ClassB>> m_type_groups;
};

调用示例

ClassA a;
// 原来的SetType1(a,b,c)直接替换成下面的写法,传多少个参数都支持
a.SetType(0, {obj1, obj2, obj3, obj4}); 
// 访问原来的type1_1直接调用getter
ClassB val = a.type1_1();

优化收益

  1. 新增同组变量不需要修改Set函数参数列表,支持任意数量的入参
  2. 新增type3、type4等新系列,不需要新增重复的Set、Get函数,直接用新的组别下标即可
  3. 消除了重复存储,减少了冗余赋值逻辑,后续维护成本大幅降低

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:15:03