当前位置: 首页 > news >正文

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

关键代码
   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);    // linetext << matchor.captured(1);    // objtext << matchor.captured(2);    // functext << matchor.captured(3);    // paramauto 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博客


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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • elk+filebeat+kafka集群部署
  • 抖音小店新宠儿成都夏光汝网络科技
  • 对优先级队列(堆)的理解
  • 【工具】-gdb-学习笔记
  • 推动未来的引擎:人工智能大模型的现状与发展
  • 基于改进拥挤距离的多模态多目标优化差分进化(MMODE-ICD)求解无人机三维路径规划(MATLAB代码)
  • 云计算学习——5G网络技术
  • 前端开发者必备:揭秘谷歌F12调试的隐藏技巧!
  • PixelMaster - 图片像素化终极利器 !
  • U盘数据恢复不再难:2024年4款工具,找回你“躲藏”的记忆
  • BootStrap前端面试常见问题
  • 【刷题汇总 -- 爱吃素、相差不超过k的最多数、最长公共子序列(一)】
  • 常回家看看之fastbin_attack
  • JVM知识体系梳理
  • PTA—基础编程题目集(7-18)
  • canvas 高仿 Apple Watch 表盘
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • CSS3 变换
  • JavaScript HTML DOM
  • Sass 快速入门教程
  • v-if和v-for连用出现的问题
  • vue-router 实现分析
  • 鱼骨图 - 如何绘制?
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • puppet连载22:define用法
  • 选择阿里云数据库HBase版十大理由
  • ​linux启动进程的方式
  • ​数据链路层——流量控制可靠传输机制 ​
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • #QT(TCP网络编程-服务端)
  • (02)Hive SQL编译成MapReduce任务的过程
  • (14)Hive调优——合并小文件
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (三)c52学习之旅-点亮LED灯
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一)80c52学习之旅-起始篇
  • .bat批处理(六):替换字符串中匹配的子串
  • .net core 6 集成和使用 mongodb
  • .Net Core 中间件验签
  • .NET 发展历程
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET 命令行参数包含应用程序路径吗?
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NET企业级应用架构设计系列之技术选型
  • /etc/shadow字段详解
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @angular/cli项目构建--Dynamic.Form
  • @ModelAttribute 注解
  • @Not - Empty-Null-Blank
  • @Transactional事务注解内含乾坤?