对重复代码进行治理,发现很多冗余代码就因为其中的一行无法复用,就拷贝一份,造成大量重复代码,且后期维护成本很高,很容易改漏了
1、使用函数指针进行代码去重
如下代码相似度非常高,只是因为其中某个函数调用的名字不一样,这种的可以使用函数指针:
修改方法:
typedef WORD16 (*SupiCalGroup)(const SUPI supi, const WORD32 scTypeId)
WORD16 getGroupByXXXXComm(const NgXXXX &5gsuci, SupiCalGroup supiCalGroup,const WORD32 srvType) { WORD16 groupId = NORMAL_USER_GROUP_NUM; if (!checkXXXX(xxxx)) { STAT(calUserGroupIdByErrorxxxx); return generateGrpForErrorXXXX(xxxx); } if (5gsuci.schemeID == PROFILE_A_XXXX) { STAT(calUserGroupIdByAXXXX); groupId = getGroupByMSIN(5gsuci.schm + 32, 5gsuci.schmLen - 40); } if (5gsuci.schemeID == PROFILE_B_XXXX) { STAT(calUserGroupIdByBXXXX); groupId = getGroupByMSIN(5gsuci.schm + 33, 5gsuci.schmLen - 41); } if (5gsuci.schemeID == NULL_SCHEME_XXXX) { SUPI 5gsupi{}; if(getSUPIFromNullSchemeXXXX(5gsuci, 5gsupi)) { STAT(calUserGroupIdByNullXXXX); groupId = supiCalGroup(5gsupi, srvType); } } if(groupId >= MAX_GROUP_NUM) { STAT(calUserGroupIdIsErrorXXXX); groupId = MAX_GROUP_NUM - 1; } return groupId; }
修改后俩个接口:
2、使用lamba表达式进行代码去重
下面重复代码也很相似,但是会发现用函数指针咋也搞不定,因为依赖内存里变量不一样,参数稍微有点差别,此时可以用lamba表达式
将不一样的那行代码作为一个函数参数进行传递,比较这个语句,共享函数主体需要给这个函数传递如下参数:
(NAAMMFF_GETALLR_AAMMFFIDINSET_ACK&rsp, WORD32 i, WORD32 total)
因此提供如下一个函数包装:
using DealdataFunc = std::function<void(DM_NAMF_MP_GETALLR_AMFIDINSET_ACK &ack, WORD32 i, WORD32 total)>;
WORD32 getAllAmfIdInset(DealdataFunc dealData) { NAAMMFF_GETALLR_AAMMFFIDINSET_REQ req = {0}; NAAMMFF_GETALLR_AAMMFFIDINSET_ACK rsp; req.msgType = MSG_CALL; req.dwTupleNo = 0; WORD32 totalNum = 0; do { if(!DBM_CALL(NAAMMFF_GETALLR_AAMMFFIDINSET, (LPSTR)&req, (LPSTR)&rsp) || RC_OK != rsp.retCODE || 0 == rsp.dwValidNum) { CFG_LOG(LOG_ERROR_LEV, "DBM_CALL NAAMMFF_GETALLR_AAMMFFIDINSET false."); return totalNum; } WORD32 validNum = AAMMFFMIN(rsp.dwValidNum, NAAMMFF_COMMUNICATION_GETALL_MAX); for(WORD32 i = 0; i < validNum; i++) { dealData(ack, i, totalNum); totalNum++; if(totalNum >= GUAMI_MAX_NUM) { return totalNum; } } req.dwTupleNo = rsp.dwTupleNo; } while(!rsp.blEnd); return totalNum; }
然后俩个接口改成如下即可:
lambda表达式详解:
https://blog.csdn.net/A1138474382/article/details/111149792
注意理解仿函数哦~
开开心心每一天~写代码的小熊猫
5gsuci标签:5gsuci,lamba,代码,WORD32,totalNum,思考,rsp,groupId,表达式 From: https://www.cnblogs.com/effortscodepanda/p/17227227.html