C++自定义接口类设计器之可对称赋值三

关键代码
cpp 复制代码
   QStringList newLines;
    for (const auto& line : lines) {
        auto equalIndex = line.indexOf("=");
        if(-1 != equalIndex) {
            // a = b; 赋值
            auto var = line.mid(0, equalIndex).trimmed();
            auto value = line.mid(equalIndex + 1).trimmed();
            if(value.endsWith(");")) { // a = b.get(); 赋值
                value.replace("get", "set");
                value.insert(value.size() - 2, var);
            } else if(value.endsWith(";")) {
                value.chop(1);
                value += " = " + var;
            }
            newLines << value;
        } else {
            auto paramStartIndex = line.indexOf('(');
            auto paramEndIndex = line.lastIndexOf(')');
            if(-1 == paramStartIndex || -1 == paramEndIndex)
                continue;

            // 创建正则表达式  a->set(b.c.d);
            QString pattern = R"(\w+(\.|->)set\w+\((\w+\.*)+\);)";
            QRegularExpression regex(pattern);
            QRegularExpressionMatch matchor = regex.match(line);
            if (matchor.hasMatch()) {
                // 获取匹配的内容
                auto text = matchor.capturedTexts();
                text << matchor.captured(0);    // line
                text << matchor.captured(1);    // obj
                text << matchor.captured(2);    // func
                text << matchor.captured(3);    // param
                auto var_name = line.mid(0, paramStartIndex);
                var_name.replace("set", "get");
                var_name += "()";
                auto param_name = line.mid(paramStartIndex + 1, paramEndIndex - paramStartIndex - 1);
                param_name += " = " + var_name + ";";
                newLines << param_name;
            }

            // b->get() (\\w+)(->|\\.)\\w+(\\(|$)
            // 创建正则表达式 a->set(b.get());
            pattern = R"(\w+(->|\.)set\w+\(((\w+)(->|\.))*get\w+\(\)\);)";
            regex.setPattern(pattern);

            // 查找匹配项
            matchor = regex.match(line);
            if (matchor.hasMatch()) {
                // 获取匹配的内容
                QString matchedText = matchor.captured(0);
                QString objectName = matchor.captured(1);
                QString functionName = matchor.captured(2);
                QString parameterFunctionCall = matchor.captured(3);

                auto var_name = line.mid(0, paramStartIndex);
                var_name.replace("set", "get");
                var_name += "()";
                auto param_name = line.mid(paramStartIndex + 1, paramEndIndex - paramStartIndex - 1);
                param_name.replace("get", "set");
                param_name.insert(param_name.size() - 1, var_name);
                param_name += ';';
                newLines << param_name;
            }
        }
    }
对称前
对称后

C++自定义接口类设计器之函数解析二-CSDN博客


创作不易,小小的支持一下吧!

相关推荐
knighthood20011 分钟前
VTK/PCL点云可视化:解决加载后需要手动缩放的问题
c++·pcl
daxi1502 分钟前
C语言从入门到进阶——第18讲:内存函数
c语言·开发语言·算法
unityのkiven3 分钟前
如何通过DirectShow用C++实现PTZ相机的控制?
开发语言·c++·数码相机
实心儿儿3 分钟前
C++ —— C++11
开发语言·c++
chushiyunen4 分钟前
python web框架streamlit
开发语言·前端·python
小辉同志8 分钟前
17. 电话号码的字母组合
c++·算法·leetcode·深度优先
思小瓜……。9 分钟前
校园邮箱过期如何激活MATLAB R2022a
开发语言·matlab·激活软件
眷蓝天12 分钟前
python基础
开发语言·python
迷糊小鬼13 分钟前
Button matrix(矩阵按钮) (lv_buttonmatrix)
c语言·开发语言·前端·ui·矩阵
你撅嘴真丑14 分钟前
和为给定数 与 最匹配的矩阵
c++·算法·矩阵