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


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

相关推荐
久爱@勿忘18 小时前
vue/uniapp H5页面截图
开发语言·前端·javascript
2301_8009769318 小时前
python的协程
开发语言·python
武超杰18 小时前
Spring Cloud Alibaba Nacos 进阶:配置隔离、集群、持久化与开机自启
java·开发语言
Rabitebla18 小时前
C++类和对象(中):默认函数 + 运算符重载 + 日期类实现完整笔记
java·开发语言·javascript
苕皮蓝牙土豆19 小时前
Qt图形视图框架入门:坐标系统与鼠标事件处理详解
c++·qt
Bat U19 小时前
JavaEE|多线程(一)
java·服务器·开发语言
逻辑驱动的ken19 小时前
Java高频面试考点场景题05
java·开发语言·深度学习·求职招聘·春招
Royzst19 小时前
String方法
java·开发语言
代码羊羊19 小时前
Rust基础类型与变量全解析
开发语言·后端·rust
众少成多积小致巨19 小时前
libbinder_ndk 入门指南
前端·c++·架构