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


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

相关推荐
不想写代码的星星7 小时前
std::function 详解:用法、原理与现代 C++ 最佳实践
c++
樱木Plus2 天前
深拷贝(Deep Copy)和浅拷贝(Shallow Copy)
c++
blasit4 天前
笔记:Qt C++建立子线程做一个socket TCP常连接通信
c++·qt·tcp/ip
肆忆_5 天前
# 用 5 个问题学懂 C++ 虚函数(入门级)
c++
不想写代码的星星5 天前
虚函数表:C++ 多态背后的那个男人
c++
端平入洛7 天前
delete又未完全delete
c++
端平入洛8 天前
auto有时不auto
c++
郑州光合科技余经理9 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1239 天前
matlab画图工具
开发语言·matlab
dustcell.9 天前
haproxy七层代理
java·开发语言·前端