news 2026/11/2 14:55:17

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++自定义接口类设计器之模板代码生成四
关键代码
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博客


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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/2 14:52:01

工业SPI隔离实战:基于MAX14431与STM32F303ZE的完整设计与调试指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/2 14:51:57

PIC32MZ与MAX14431的工业SPI隔离设计:从选型到实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/2 14:49:25

SPI数字隔离器实战:STM32C031与MAX14431的工业抗干扰设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/2 14:48:05

回形针的隐藏技能:从办公文件管理到生活应急的万能小工具

1. 回形针这东西,远没有看上去那么简单办公桌上总有那么几样东西,看着不起眼,但真要较起真来,设计之精妙、用途之广泛,能让你重新审视它。回形针就是典型代表。你可能觉得回形针不就是一根弯成圈的铁丝嘛,夹…

作者头像 李华
网站建设 2026/11/2 14:47:04

测试用例总结实战:从需求映射到覆盖度矩阵的完整指南

1. 测试用例到底在解决什么问题做软件测试这行十来年,我见过太多团队把测试用例写成“操作说明书”——点这里、填那里、看结果对不对。这种写法本身没错,但它只解决了“怎么点”的问题,没解决“为什么点”和“点漏了怎么办”的问题。测试用例…

作者头像 李华
网站建设 2026/11/2 14:45:45

ECharts柱状图hover柱子不隐藏的配置排查

最近一次做运营看板,产品同学直接把截图甩到群里,说“柱状图 hover 的时候柱子不见了”。我打开页面看了两秒,柱子其实还在,只是从深蓝变成了几乎透明的浅灰,只剩一个模糊的轮廓。这类问题我这几年前后遇到过十几次&am…

作者头像 李华