首页 > 编程语言 >C++自定义接口类设计器之模板代码生成四

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

时间:2024-08-03 22:29:04浏览次数:16  
标签:代码生成 自定义 val auto C++ funcName trimmed line name

关键代码
    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博客


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

标签:代码生成,自定义,val,auto,C++,funcName,trimmed,line,name
From: https://blog.csdn.net/qq_30220519/article/details/140897991

相关文章

  • c++__位运算符:位与运算符&
    目的:了解位与运算符并加深对它的运用定义:一种二元运算符,符号为&,运用于二进制数中,特性为有0为0。#include<iostream>usingnamespacestd;intmain(){inta=0b1010;//10intb=0b0110;//6//a&b=0b0010;2cout<<(a&b)<<endl;}应用:1、判断奇偶性......
  • C++实现静态链表
    #include<iostream>usingnamespacestd;//定义静态链表的最大容量constintMAX_SIZE=100;//节点类classNode{public:intdata;//节点存储的数据intnext;//节点指向下一个节点的索引(在数组中的位置)//默认构造函数Node():data(0......
  • c++三国杀
    废话不多说,直接上代码!!!#include<iostream>#include<time.h>#include<stdio.h>#include<stdlib.h>usingnamespacestd;structpai{intpaifu;inthuase;intyanse;intdianshu;intleixing;intchangdu;voidKanpai(){if(paifu==0||paifu==......
  • [Spring]自定义注解
    SpringBoot自定义注解实现在学习SpringBoot过程中,学习了一些SpringBoot特有的注解,大多是为了使用方便将多个注解进行了整合。既然学习到了注解,就来重新认识一下Spring的自定义注解实现过程,在之后学习新注解的实现原理时会更加游刃有余。SpringBoot实现自定义注解Java元注解Jav......
  • 「字符串」实现Trie(字典树|前缀树)的功能 / 手撕数据结构(C++)
    概述在浏览器搜索栏里输入几个字,就弹出了以你的输入为开头的一系列句子。浏览器是怎么知道你接下来要输什么的?来看看字典树干了什么。字典树是一种高效记录字符串和查找字符串的数据结构。它以每个字符作为一个节点对字符串进行分割记录,节点形成树状结构,在录入或查找时只......
  • Java中的类加载机制与自定义类加载器设计
    Java中的类加载机制与自定义类加载器设计大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们来探讨Java中的类加载机制与自定义类加载器设计。Java的类加载机制是Java虚拟机(JVM)运行时系统的基础之一,了解其工作原理以及如何设计自定义类加载器,对......
  • 【leetcode详解】正方形中的最多点数【中等】(C++思路精析)
    思路精析:自定义结构体解读:一个点是否在题给正方形中,只取决于其横纵坐标的最大值,记为dis沟通二位数组points和字符串s的桥梁,就是这个点的序号,记为idx由此自定义结构体,储存dis和idx//其中booloperator部分的功能:重载小于操作符“<”,使sort(vc.begin(),vc.end());按dis......
  • 整数二分(c++)
    1、什么是整数二分:即可以看做成找数字那个游戏在一百个数字中找到指定的数字(66)A出题B:50A50太小了B:(50+100)/2=75A75太大了B:(50+75)/2=62…所以也可以知道一个结论:有单调性,一定可以二分。可以二分的题目,不一定有单调性。2、代码思路:1、寻找到满足......
  • 【C++BFS】802. 找到最终的安全状态
    本文涉及知识点C++BFS算法LeetCode802.找到最终的安全状态有一个有n个节点的有向图,节点按0到n-1编号。图由一个索引从0开始的2D整数数组graph表示,graph[i]是与节点i相邻的节点的整数数组,这意味着从节点i到graph[i]中的每个节点都有一条边。如果一......
  • 离散化-c++
    离散化:一、使用情景值域大e.g.0~1e9个数少e.g.0~1e5二、使用方法将数组中的数映射到从0开始的自然数a[]:1、3、100、2000、50000映射到从0开始的自然数:0,1,2,3,4这个过程就是离散化三、两个问题:1.a数组中最开始可能有重复元素,需要去重vector<int>alls;//存......