C++自定义接口类设计器之模板代码生成四

news2024/9/25 1:17:26
关键代码
    QStringList multis = templateStr.split('\n');
    bool startConfig = false;
    bool startVar = false;
    bool startTemplate = false;
    for (const auto& line : multis) {
        if(startConfig) {
            if(line.trimmed().startsWith("camealCase")) {
                auto name_val = line.split('=');
                if(name_val.empty())
                    continue;
                auto val = name_val.back();
                m_isCamelCase = ("true" == val.trimmed());
            }
        }

        if(startVar) {
            if(line.trimmed().startsWith("scopeName")) {
                auto name_val = line.split('=');
                if(name_val.empty())
                    continue;
                m_scopeName = name_val.back().trimmed();
            } else if(line.trimmed().startsWith("funcName")) {
                auto name_val = line.split('=');
                if(name_val.empty())
                    continue;
                m_funcName = name_val.back().trimmed();
            } else if(line.trimmed().startsWith("returnType")) {
                auto name_val = line.split('=');
                if(name_val.empty())
                    continue;
                m_returnType = name_val.back().trimmed();
            } else if(line.trimmed().startsWith("defaultReturn")) {
                auto name_val = line.split('=');
                if(name_val.empty())
                    continue;
                m_defalutValue = name_val.back().trimmed();
            } else if(line.trimmed().startsWith("paramType")) {
                auto name_val = line.split('=');
                if(name_val.empty())
                    continue;
                m_paramType = name_val.back().trimmed();
            }
        }

        if(startTemplate) {
            auto replaceText = line;
            if(auto index = line.indexOf("${returnType}"); -1 != index) {
                replaceText.replace("${returnType}", m_returnType);
            }
            if(auto index = line.indexOf("${scopeName}"); -1 != index) {
                if(m_isCamelCase) {
                    auto preChar = line.at(index - 1);
                    auto newScopeName = m_scopeName;
                    if(QChar(' ') == preChar)
                        newScopeName.replace(0, 1, newScopeName.at(0).toUpper());
                    else
                        newScopeName.replace(0, 1, newScopeName.at(0).toLower());
                    replaceText.replace("${scopeName}", newScopeName);
                } else {
                    replaceText.replace("${scopeName}", m_scopeName);
                }
            }
            if(auto index = line.indexOf("${funcName}"); -1 != index) {
                if(m_isCamelCase) {
                    auto preChar = line.at(index - 1);
                    auto newFuncName = m_funcName;
                    if(QChar(' ') == preChar)
                        newFuncName.replace(0, 1, newFuncName.at(0).toLower());
                    else
                        newFuncName.replace(0, 1, newFuncName.at(0).toUpper());
                    replaceText.replace("${funcName}", newFuncName);
                } else {
                    replaceText.replace("${funcName}", m_funcName);
                }
            }
            if(auto index = line.indexOf("${paramType}"); -1 != index) {
                replaceText.replace("${paramType}", m_paramType);
            }
            if(auto index = line.indexOf("${defaultReturn}"); -1 != index) {
                replaceText.replace("${defaultReturn}", m_defalutValue);
            }
            m_template += replaceText + '\n';
        }


        if("[config]" == line.trimmed()) {
            startConfig = true;
        } else if("[var]" == line.trimmed()) {
            startConfig = false;
            startVar = true;
        } else if("[template]" == line.trimmed()) {
            startVar = false;
            startTemplate = true;
        }
    }
模板配置

[config]
camealCase = true

[var]
scopeName = Test
funcName = genetate
returnType = std::string
defaultReturn = ""

[template]
${returnType} ${scopeName}::get${funcName}() const
{
    auto node = getNode();
    if (!node)
        return ${defaultReturn};

    ${returnType} ${funcName} = node->${funcName}(); // 修改属性名
    return ${funcName};
}

生成后
std::string Test::getGenetate() const

{
    
auto node = getNode();

if (!node)

return "";



std::string genetate = node->genetate(); // 修改属性名

return genetate;

}

C++ 模板代码自动生成_c++自动生成代码-CSDN博客

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


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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web开发-html篇-上

HTML发展史 HTML的历史可以追溯到20世纪90年代初。当时,互联网尚处于起步阶段,Web浏览器也刚刚问世。HTML的创建者是蒂姆伯纳斯-李(Tim Berners-Lee),他在1991年首次提出了HTML的概念。HTML的初衷是为了方便不同计算机…

TOA/TDOA测距定位,三维任意(>3)个锚节点,对一个未知点进行定位|MATLAB源代码

目录 程序介绍程序截图和运行结果程序截图运行结果 源代码代码修改建议 程序介绍 TOA/TDOA使用三点法测距,在空间中,有4个锚节点就可以定位,但如果有多个节点,定位效果会更好。 锚点不同时,修改程序中的向量和矩阵维度…

C++——哈希结构

1.unordered系列关联式容器 本节主要介绍unordered_map和unordered_set两个容器&#xff0c;底层使用哈希实现的 unordered_map 1.unordered_map是储存<key,value>键值对的关联式容器&#xff0c;其允许通过key快速查找到对应的value&#xff0c;和map非常相似&#x…

JavaFX布局-ToolBar

JavaFX布局-ToolBar 常用属性orientationpadding 实现方式Java实现fxml实现 容纳一组按钮的容器支持水平、垂直布局内容太多&#xff0c;会自动折叠 常用属性 orientation 排列方式&#xff0c;Orientation.VERTICAL、Orientation.HORIZONTAL flowPane.setOrientation(Orient…

【时时三省】(C语言基础)函数递归练习

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ——csdn时时三省 求字符串长度 求的是arr里面字符串的长度 abc后面还有一个\0为结束标志 在结算字符串长度的时候不算\0 所以它的长度是3 模拟实现一个strlen函数 str等于\0的时候就会结束返回count 如果…

纯css的loading效果

在之前的文章里面实现loading组件的封装 其实在日常生活中我们可以采用纯css的组件方式实现loading 的效果 其中<p>元素被绝对定位在其父元素的中心&#xff0c;并且其内部的文本大小和对行间距&#xff08;line-height&#xff09;是响应式的&#xff0c;基于视口宽度&…

《工程检索增强生成系统时的七个失败点》论文 AI 解读

周末使用 AI 速度了一篇 RAG 相关的论文&#xff0c;文中提到的【设计 RAG 系统时需要考虑的七个失败点】非常有价值&#xff0c;简单整理一下分享出来&#xff0c;大家如果感兴趣可以继续阅读原文。 论文名称&#xff1a;Seven Failure Points When Engineering a Retrieval A…

php反序列化靶机serial实战

扫描ip,找到靶机ip后进入 他说这是cookie的测试网页&#xff0c;我们抓个包&#xff0c;得到cookie值 base64解码 扫描一下靶机ip的目录 发现http://192.168.88.153/backup/&#xff0c;访问 下载一下发现是他的网页源码 通过代码审计&#xff0c;发现 通过代码审计得知&…

盘点和讯飞语音转文字一样好用的4款转换工具。

语音转文字能够快速准确地记录下人们的发言&#xff0c;使用相应的工具能够让我们不用担心遗漏重要信息&#xff0c;或者花费大量时间手动整理成文字内容。很多人都知道讯飞语音转文字&#xff0c;但是现在网络上也有很多其他好用的工具&#xff0c;就比如这4款&#xff1a; 1、…

Spring的配置类分为Full和Lite两种模式

Spring的配置类分为Full和Lite两种模式 首先查看 Configuration 注解的源码, 如下所示: Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented Component public interface Configuration {AliasFor(annotation Component.class)String value() defau…

Apache解析漏洞~CVE-2017-15715漏洞分析

Apache解析漏洞 漏洞原理 # Apache HTTPD 支持一个文件拥有多个后缀&#xff0c;并为不同后缀执行不同的指令。比如如下配置文件&#xff1a; AddType text/html .html AddLanguage zh-CN .cn# 其给 .html 后缀增加了 media-type &#xff0c;值为 text/html &#xff1b;给 …

WordPress资源下载类主题 CeoMax-Pro_v7.6绕授权开心版

CeoMax-Pro强大的功能 在不久的将来Ta能实现你一切幻想&#xff01;我们也在为此而不断努力。适用于资源站、下载站、交易站、素材站、源码站、课程站、cms等等等等&#xff0c;Ta 为追求极致的你而生。多风格多样式多类型多行业多功能 源码下载&#xff1a;ceomax-pro7.6.zip…

<数据集>航拍行人识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;7482张 标注数量(xml文件个数)&#xff1a;7482 标注数量(txt文件个数)&#xff1a;7482 标注类别数&#xff1a;1 标注类别名称&#xff1a;[people, pedestrian] 序号类别名称图片数框数1people5226385602pedes…

hcip作业1

写网关 r1 <Huawei>system-view [Huawei]sysname r1 [r1]interface GigabitEthernet 0/0/0 [r1-GigabitEthernet0/0/0]ip address 192.168.1.1 24 [r1]interface g 0/0/1 [r1-GigabitEthernet0/0/1]ip address 192.168.3.1 24 [r1]interface LoopBack 0 [r1-LoopBack0…

【算法/题目】:递归、搜索训练

✨ 吾与春风皆过客&#xff0c;君携春水揽星河 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;算法训练 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 …

117页PPT埃森哲-物流行业信息化整体规划方案

一、埃森哲-物流行业信息化整体规划方案 资料下载方式&#xff0c;请看每张图片右下角信息 埃森哲在物流行业信息化整体规划项目中的核心内容&#xff0c;旨在帮助物流企业通过信息技术的应用实现业务流程的优化、运营效率的提升以及市场竞争力的增强。以下是埃森哲在此类项目…

全面掌握 Kubernetes 对象的基本操作:从定义到实践

引言 Kubernetes 是当今最流行的容器编排平台之一&#xff0c;它通过自动化容器化应用的部署、扩展和管理&#xff0c;极大地提升了应用的可用性和可扩展性。在 Kubernetes 系统中&#xff0c;对象是其核心概念之一&#xff0c;是对系统状态的持久化描述。理解 Kubernetes 对象…

日志定向实验

目录 一.实验环境 二.实验一 1.node1主机进入rsyslog.conf文件添加规则 2.重启服务测试 三.实验二 1.node1主机进入rsyslog.conf文件添加规则 2.node1重启服务&#xff0c;清除日志历史记录 2.node2主机重新登录node1 3.node1没有日志记录 4.node1重启httpd 5.node1…

网络基础之(2)初级网络知识

网络基础之(2)初级网络工程师 Author&#xff1a;Once Day Date: 2024年7月29日 漫漫长路&#xff0c;有人对你笑过嘛… 全系列文档可参考专栏&#xff1a;通信网络技术_Once-Day的博客-CSDN博客。 来自锐捷数通技术基础资料&#xff0c;百度云盘链接: 下载链接&#xff0c…

状体管理-装饰器

State 自己的状态 注意:不是状态变量的所有更改都会引起刷新。只有可以被框架观察到的修改才会引起UI刷新。 1、boolean、string、number类型时&#xff0c;可以观察到数值的变化。 2、class或者Object时&#xff0c;可以观察 自身的赋值 的变化&#xff0c;第一层属性赋值的变…