首页 > 其他分享 >代码去重引发对lamba表达式思考

代码去重引发对lamba表达式思考

时间:2023-03-17 16:36:19浏览次数:42  
标签:5gsuci lamba 代码 WORD32 totalNum 思考 rsp groupId 表达式

对重复代码进行治理,发现很多冗余代码就因为其中的一行无法复用,就拷贝一份,造成大量重复代码,且后期维护成本很高,很容易改漏了

 

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

相关文章

  • EL表达式学习总结之基础篇
    EL表达式全称:ExpressionLanguageEL表达式一般操作的是作用域(application,session,request,pageContext)中的属性。EL变量指某一个作用域中的属性。<%=((Person)request......
  • 10. 正则表达式匹配
    10.正则表达式匹配1.动态规划publicbooleanisMatch(Strings,Stringp){char[]cs=s.toCharArray();char[]cp=p.toCharArray();......
  • C++11lambda表达式精讲
    lambda表达式的概念和基本用法lambda表达式定义了一个匿名函数,并且可以捕获一定范围内的变量。lambda表达式的语法形式可简单归纳如下:[capture](params)opt->......
  • C语言使用正则表达式
    #include<regex.h>regcomp编译正则表达式intregcomp(regex_t*compiled,constchar*pattern,intcflags);①regex_t是一个结构体数据类型,用来存放编译后的正则表......
  • 【10分钟入门】想学爬虫?关于正则表达式,看这一篇就够了!
    最近接触到正则表达式,用于匹配对应的字符串,觉得很神奇,于是开始一个学习。有句老话说得好:“爬虫写得好,牢范吃得饱。”哈哈哈当然是开个玩笑。工具推荐regex101:build,......
  • Jmeter——性能测试的认知以及思考bug(一)
    前言性能测试是一个全栈工程师/架构师必会的技能之一,只有学会性能测试,才能根据得到的测试报告进行分析,找到系统性能的瓶颈所在,而这也是优化架构设计中重要的依据。测试流......
  • 算法 -- 正则表达式匹配 (动态规划)
    原题:10.正则表达式匹配困难3.5K相关企业给你一个字符串s和一个字符规律p,请你来实现一个支持'.'和'*'的正则表达式匹配。'.'匹配任意单个字符'*'匹配零个......
  • 思考(C++)
    为什么C++类中成员访问修饰符是private、protected、public三种而不是别的?面向对象的三大特征是:封装,继承和多态封装是指隐藏对象的属性和实现细节,仅对外公开接口使得使用......
  • C# || 批量翻译工具 || 百度翻译api || 读取.cs文件内容 || 正则表达式筛选文件
    背景:我们项目一开始的所有提示都是中文,后来要做国际化。发现项目中的带双引号的中文居然有 2.3w 多条!!!简直让人欲哭无泪...如果使用人工改的话,首先不说正确率了。光是......
  • 正则表达式基本使用
    基本使用1.匹配单词边界与非单词边界在正则表达式中,由数字、字母、下划线组成的连续序列表示一个单词,用\w表示,\w的边界用\b表示;那么,其余的非边界用\B表示。例如,“a_1”表......