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

31 篇文章 0 订阅
11 篇文章 0 订阅
关键代码
   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博客


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

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码力码力我爱你

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值