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博客


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

相关推荐
烤麻辣烫6 分钟前
黑马程序员苍穹外卖(新手)DAY12
java·开发语言·学习·spring·intellij-idea
MM_MS13 分钟前
C# 线程与并发编程完全指南:从基础到高级带详细注释版(一篇读懂)
开发语言·机器学习·计算机视觉·c#·简单工厂模式·visual studio
t***316513 分钟前
QT开发:事件循环与处理机制的概念和流程概括性总结
开发语言·qt
龙泉寺天下行走23 分钟前
[PowerShell 入门教程] 第9.5天(间章):PowerShell 常见 Cmdlet 速查手册
开发语言·php
Rock_yzh26 分钟前
LeetCode算法刷题——560. 和为 K 的子数组
数据结构·c++·学习·算法·leetcode·职场和发展·哈希算法
muxin-始终如一29 分钟前
Semaphore 使用及原理详解
java·开发语言·python
名扬9111 小时前
webrtc编译问题-ubuntu
开发语言·python
白云千载尽1 小时前
Python 初学者 / 中级开发者常踩坑的 10 个坑 —— 要用好几年才能彻底搞清楚的
开发语言·python
Evand J1 小时前
【MATLAB雷达滤波代码】二维,单雷达跟踪与滤波。EKF融合雷达的距离、角度+目标IMU数据。附代码下载链接
开发语言·matlab·雷达·ekf·雷达跟踪·角度观测
weixin_462446231 小时前
【原创实现】Python 实现 PDF 批量压缩工具(支持逐个确认 / 批量处理 / 多级压缩)
开发语言·python·pdf