久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

C 好用的文本模板庫 -- Inja

 杞鄉(xiāng)青年 2023-11-01 發(fā)布于寧夏

背景

概述

在 C++ 開發(fā)中,我們經(jīng)常需要處理文本模板,,并根據(jù)特定的數(shù)據(jù)進(jìn)行動(dòng)態(tài)替換。為了簡化這一過程并提高代碼的可維護(hù)性,,Inja 庫應(yīng)運(yùn)而生,。

Inja

Inja 是用 Json 為前端的模板引擎,基于 nlohmann/json 庫,。它允許你使用 Json 數(shù)據(jù)輕松渲染字符串模板,,它提供了一套簡潔而強(qiáng)大的 API,使得在 C++ 中進(jìn)行進(jìn)行動(dòng)態(tài)字符串替換變得輕而易舉,、可以更高效地進(jìn)行模板化處理,。

Inja

概述

Inja 是一個(gè)輕量級的 C++ 庫,,用于處理文本模板的渲染和替換。

主要特性

  • 輕量級:它是一個(gè)頭文件為主的庫,,這意味著集成起來很容易,。
  • 完全支持 Json:由于依賴于 nlohmann/json 庫,inja 對 Json 數(shù)據(jù)的支持很完整,。
  • 現(xiàn)代 C++:使用 C++11 的特性,,使其更為現(xiàn)代化且具有可讀性。
  • 支持條件和循環(huán):除了基礎(chǔ)的數(shù)據(jù)替換,,inja 還支持條件判斷和循環(huán),,使得模板渲染更加動(dòng)態(tài)。
  • 自定義回調(diào):你可以定義自己的回調(diào)函數(shù),,以擴(kuò)展模板中的功能,。

應(yīng)用場景

Inja 庫在 C++ 中有許多應(yīng)用場景:

  • 配置文件生成:對于那些需要根據(jù)用戶輸入或外部參數(shù)動(dòng)態(tài)生成配置文件的應(yīng)用程序或工具,inja 是非常有用的,。

  • Web 服務(wù):如果在 C++ 中寫了一個(gè) Web 服務(wù)器或 API 服務(wù),,你可能需要?jiǎng)討B(tài)生成 HTML、JSON 或其他格式的響應(yīng),。

  • 代碼生成:inja 可以被用于工具中,,這些工具需要基于某些模板生成源代碼。例如,,根據(jù)數(shù)據(jù)庫模式生成 C++ 數(shù)據(jù)結(jié)構(gòu)或 ORM 代碼,。

  • 報(bào)告和日志:你可以使用 inja 來動(dòng)態(tài)生成格式化的日志條目或報(bào)告,,尤其是當(dāng)這些報(bào)告需要包含很多動(dòng)態(tài)數(shù)據(jù)并遵循特定的格式時(shí),。

  • 郵件通知:對于那些需要發(fā)送動(dòng)態(tài)內(nèi)容的郵件的應(yīng)用程序,inja 可以幫助渲染郵件內(nèi)容,。

  • UI 渲染:對于某些 C++ 桌面應(yīng)用程序,,它們可能有一個(gè) HTML/CSS/JS 的前端,inja 可以被用于渲染 HTML 內(nèi)容,。

  • 文件模板化:對于任何需要基于模板動(dòng)態(tài)生成文件的場景,,無論是配置文件、代碼文件還是其他任何類型的文件,,都可以使用 inja,。

  • 插件和擴(kuò)展系統(tǒng):如果應(yīng)用程序允許第三方開發(fā)者編寫插件或擴(kuò)展,inja 可以作為一個(gè)簡單的方式讓他們添加自己的模板或修改現(xiàn)有的模板,。

源碼下載

Inja 是一個(gè) headers only 的庫,,只需把其源碼目錄中的 include 下載下來即可,另外其需要引用 nlohmann/json.hpp 文件,。

  • inja

inja gitHub 倉庫:https://github.com/pantor/inja

  • nlohmann/json

nlohmann/json gitHub 倉庫:https://github.com/nlohmann/json#projects-using-json-for-modern-c

Inja 使用示例

概述

在 Visual Studio 中使用 inja 庫,,需要設(shè)置 C++ 標(biāo)準(zhǔn)為 C++ 17:

圖片

基本用法

概述

inja 使用 {{ ... }} 表示變量,,從給定的 json 數(shù)據(jù)中獲取變量值進(jìn)行渲染。

代碼示例

#include <inja.hpp>
using namespace inja;

int main()
{
 json data;
 data['name'] = 'world';
 render_to(std::cout'Hello {{ name }}!', data); 
}

運(yùn)行結(jié)果如下:

圖片

使用循環(huán)

概述

for in 語句需要使用 {% ... %} 包含,,另外循環(huán)中有一些特殊的變量可以使用:

  • loop.index 從 0 開始的循環(huán)下標(biāo)
  • loop.index1 從 1 開始的循環(huán)下標(biāo)

代碼示例

#include <inja.hpp>
using namespace inja;

int main()
{
 Environment env;// 創(chuàng)建一個(gè) inja 環(huán)境對象

    json data;// 定義模板數(shù)據(jù)
    data['name'] = '張三';
    data['age'] = 30;
    data['hobbies'] = nlohmann::json::array({ '讀書''睡覺''吃飯' });

    // 定義模板內(nèi)容
 const std::string template_str = R'(
姓名: {{ name }}
年齡: {{ age }}
愛好:
{% for hobby in hobbies %}
  - {{ loop.index1 }}: {{ hobby }}
{% endfor %}
)'
;

 const std::string result = env.render(template_str, data);
    std::cout << result << std::endl;

    return 0;
}

運(yùn)行結(jié)果如下:

圖片

使用函數(shù)

概述

inja 提供了一些內(nèi)置的函數(shù)可以使用,。

代碼示例

#include <inja.hpp>
using namespace inja;

int main()
{
    json data;// 定義模板數(shù)據(jù)
    data['name'] = '張三';
    data['age'] = 30;
    data['hobbies'] = nlohmann::json::array({ '讀書''睡覺''吃飯' });

    // 讀取指定元素
 render_to(std::cout' {{ at(hobbies, 0)  }} ', data);

    std::cout << std::endl;
    // 字符串拼接
    render_to(std::cout' {{ join(hobbies, \', \')  }} ', data);

    return 0;
}

運(yùn)行結(jié)果如下:

圖片

自定義回調(diào)函數(shù)

概述

inja 支持自定義回調(diào)函數(shù)以實(shí)現(xiàn)特定的功能。

代碼示例

#include <inja.hpp>
using namespace inja;

int main()
{
    Environment env;

    json data;
    data['name'] = '張三';
    data['age'] = 30;
    data['hobbies'] = nlohmann::json::array({ '讀書''睡覺''吃飯' });

    env.add_callback('double'1, [](const Arguments& args) {
     const int number = args.at(0)->get<int>(); 
        return 2 * number;
        });

    const std::string result = env.render('{{ double(age) }}', data);
    std::cout << result << std::endl;

    return 0;
}

運(yùn)行結(jié)果如下:

圖片

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多