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

如何简化C++中重复复制粘贴的代码 减少冗余if判断并封装为函数

代码精简方案

核心优化思路是把零散的资源属性统一结构化管理,复用重复逻辑,完全消除重复代码。

优化后完整实现方案

1. 统一定义资源类型与公共常量

把所有资源归类为枚举,公共偏移抽离出来避免重复存储:

#include <vector>
#include <chrono>
#include <thread>

// 定义所有资源类型,新增资源只需在此处追加
enum class Resource : int {
    Energy,
    Minerals,
    Foods,
    Influence,
    Unity,
    Alloys,
    ConsumerGoods,
    Count // 标记资源总数量,用于数组长度声明
};

// 所有资源共用的前三级固定偏移,无需重复存储
const std::vector<DWORD> COMMON_OFFSETS = {0x168, 0x1B8, 0x30};
// 每个资源独有的最后一级偏移,顺序与Resource枚举一一对应
const DWORD RESOURCE_LAST_OFFSETS[] = {0x8, 0x10, 0x18, 0x38, 0x40, 0x4C, 0x54};

2. 重构零散变量为数组

代替原来独立声明的每个资源标记、资源指针:

// 作弊开关数组,顺序与Resource枚举一一对应
bool hackMenu[static_cast<int>(Resource::Count)] = {false};
// 资源指针数组,顺序与Resource枚举一一对应
uintptr_t* resourcePtrs[static_cast<int>(Resource::Count)];

3. 批量读取资源指针

代替原来逐行调用readOffset的重复代码:

for (int i = 0; i < static_cast<int>(Resource::Count); ++i) {
    std::vector<DWORD> fullOffsets = COMMON_OFFSETS;
    fullOffsets.push_back(RESOURCE_LAST_OFFSETS[i]);
    resourcePtrs[i] = readOffset(finallyAddress, fullOffsets);
}

4. 封装通用资源处理函数

把重复的判断、赋值、复位、延时逻辑统一封装:

void processResource(uintptr_t* resPtr, bool& enableFlag, int addValue) {
    if (!enableFlag) return;
    *resPtr += addValue;
    enableFlag = false;
    std::this_thread::sleep_for(std::chrono::milliseconds(130));
}

5. 遍历处理所有资源,完全消除重复if

原来的6个if判断可以简化为1个循环:

for (int i = 0; i < static_cast<int>(Resource::Count); ++i) {
    processResource(resourcePtrs[i], hackMenu[i], add_resource);
}

兼容原有结构的轻量化方案

如果不想改动原有offsets、cheats结构体的定义,可以用成员指针+模板做轻量化封装,也能大幅精简代码:

// 通用处理模板,无需修改原有结构体定义
template<typename T>
void processCheat(uintptr_t* resPtr, bool cheats::*flag, T addValue) {
    if (!(hackMenu.*flag)) return;
    *resPtr += addValue;
    hackMenu.*flag = false;
    std::this_thread::sleep_for(std::chrono::milliseconds(130));
}

// 原来的6个if块简化为6行调用,无重复逻辑
processCheat(minerals, &cheats::minerals, add_resource);
processCheat(influence, &cheats::influence, add_resource);
processCheat(alloys, &cheats::alloys, add_resource);
processCheat(unity, &cheats::unity, add_resource);
processCheat(foods, &cheats::foods, add_resource);
processCheat(consumer_goods, &cheats::consumer_goods, add_resource);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:39:04