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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/390321.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络安全】副业兼职日入12k,网安人不接私活就太可惜了!

暑假来了&#xff0c;很多同学后台私信我求做兼职的路子&#xff0c;这里&#xff0c;我整理了一份详细攻略&#xff0c;请大家务必查收&#xff0c;这可能会帮你把几个学期的生活费都赚够&#xff01; Up刚工作就开始做挖漏洞兼职&#xff0c;最高一次赚了12k&#xff0c;后面…

STM32Cubemx在FreeRTOS中使用面向对象的方式使用串口

文章目录 前言一、创建FreeRTOS工程二、创建文件对串口进行封装三、代码编写总结 前言 本篇文章将带大家来学习使用面向对象的方式在FreeRTOS中使用串口&#xff0c;使用面向对象的方法非常适合编写可移植性强的代码&#xff0c;那么这篇文章就带大家来看一下这个代码要怎么写…

模型 正态分布(通俗解读)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。随机世界的规律&#xff0c;大自然里的钟形曲线。 1 正态分布的应用 1.1 质量管理之六西格玛 六西格玛是一种旨在通过识别和消除缺陷原因来提高制造过程或业务流程质量的管理策略。我们先来了解下六…

CX32L003F8P6T芯片解密程序破解

CX32L003F8P6T可替代N76E003 CX32L003是一款内嵌32位ARM Cortex-M0内核的超低功耗、Low Pin Count和宽电压工作范围(2.5V~5.5V)的微控制器&#xff0c;最高可运行在24MHz&#xff0c;内置32K/64K字节的嵌入式Flash&#xff0c;4K字节的SRAM&#xff0c;集成了12位1Msps高精度SA…

C++ 初探(13课)

#include<iostream> using namespace std; int main() {cout<<"Helloworld"<<endl; } 函数:一段能够被反复调用的代码,可以接收输入,进行并行处理或者产生输出; ——返回类型:表示函数返回结果的类型,可以为void ——函数名称:用于函数的…

【JAVA设计模式】适配器模式——类适配器模式详解与案例分析

前言 在软件设计中&#xff0c;适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;旨在使不兼容的接口能够协同工作。它通过引入一个适配器类&#xff0c;帮助两个接口之间进行适配&#xff0c;使得它们能够互相操作。本文将详细介绍适配器模…

大学生编程入门指南:如何从零开始?

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 编程语言选择 &#x1f4da; 1. Python 2. JavaScript 3. Java 4. C/C 如何选择适合自己的编程语言&a…

vim列编辑模式

在编辑文本时&#xff0c;经常会有这样的需求&#xff0c;对特定列进行进行批量编辑。比如批量注释一段代码&#xff0c;或者删除待定字符&#xff08;如一列空格&#xff09;。幸运的是VIM支持列编辑模式。 假设文本内容&#xff1a; Maximum length of a custom vocabulary…

svm总结

什么是SVM&#xff1f; SVM的英文全称是Support Vector Machines&#xff0c;我们叫它支持向量机。支持向量机是我们用于分类的一种算法。让我们以一个小故事的形式&#xff0c;开启我们的SVM之旅吧。 在很久以前的情人节&#xff0c;一位大侠要去救他的爱人&#xff0c;但天…

Selenium自动化测试入门:浏览器多窗口切换【建议收藏】

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 有时web应用会打开多个浏览器窗口&#xff0c;当我们要定位新窗口中的元素时&#xff0c;我们需要将webDriver的handle&#xff08;句柄&#xff09;指定到新窗口…

js基础-作用域与作用域链

什么是作用域&#xff1f; 简单说就是在代码中定义的变量或者函数能起作用的范围 什么是作用域链&#xff1f; 简单说就是JavaScript 在执行时查找变量的过程&#xff0c;它按照从当前作用域到全局作用域的顺序逐层向上搜索&#xff0c;直到找到变量或到达作用域的顶…

精美UI三方用户中心 新版QRuser用户中心主题 | 魔方财务模板

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 新版QRuser用户中心主题 | 魔方财务模板 本主题支持魔方财务3.5.7版本&#xff01;可自由切换魔方财务3.5.7版本与其他版本。 本主题基于官方default开发&#xff0c;主要面向企业&…

《python语言程序设计》2018版第6章第27题双素数是指一堆差值为2的素数。

水平的原因做不到答案那种输出 def is_prime(number):divisor 2while divisor < number / 2:if number % divisor 0:return Falsedivisor 1return Truedef print_prime_numbers(number_of_primes):count 0number 2while number < number_of_primes:if is_prime(numb…

Node Red 与axios简易测试环境的搭建

为了学习在vue3中如何使用axios&#xff0c;我借Sider Fusion的帮助搭建了基于node的简易测试环境。 Axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;通常用于浏览器环境&#xff0c;但它也可以在 Node.js 环境中使用。因此&#xff0c;可以在 Ubuntu 的 Bash 环境下通过…

3DsMax展开管道UV,展开圆柱体UV,展开带有拐弯部分的UV

效果 3dsmax展开管道的UV 创建管道 创建样条线 制作弯曲部分 打开样条线先的顶点&#xff0c;选择样条线的顶点&#xff0c;不选中&#xff0c;开头和结尾的顶点&#xff0c;点击圆角 &#xff0c;鼠标移动到顶点上&#xff0c;左键点击顶点然后向上拖拽。 设置样条线可渲染…

JavaScript和vue实现左右两栏,中间拖动按钮可以拖动左右两边的宽度

JavaScript实现&#xff1a; <!DOCTYPE html> <html lang"en"> <head><title>拖动效果</title><style> body, html {margin: 0;padding: 0;height: 100%;font-family: Arial, sans-serif; }.container {display: flex;height: …

element-ui简单入门1.0.0

第一篇&#xff1a;table标签速用 总结&#xff1a;建楼前&#xff0c;先打地基<el-table></el-table>&#xff0c;打完地基看高度&#xff0c;一层楼4米&#xff0c;80米20个<el-table-column></el-table-column>&#xff0c;每次楼的名字是label 第…

HDFS常用命令

HDFS常用命令 1.HDFS命令介绍1.1基本语法格式1.2常用命令 1.HDFS命令介绍 HDFS 提供了一组命令行工具&#xff0c;用于管理和操作 HDFS 文件系统。 1.1基本语法格式 hdfs dfs -<命令> [选项] <参数>1.2常用命令 1.显示<path>指定的文件的详细信息。 had…

webpack打包发布~

1、安装webpack&#xff08;局部安装webpack&#xff09;。 npm i webpack webpack-cli -D 2、安装成功之后&#xff0c;你会在package.json文件中看到这个。 3、新建webpack.config.js文件&#xff0c;里面写配置编译模式&#xff0c;入口出口等&#xff08;这里演示的是单入…

C语言——求阶乘的两种方法

第一种方法使用了递归思想 #include <stdio.h> int fun(int N) {if (N 0){return 1;}else{return (fun(N - 1) * N);} } int main() {int N 0;scanf_s("%d", &N);printf("%d",fun(N)); } 第二种方法用的for循环 #include <stdio.h> i…