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


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

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码力码力我爱你

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值