模板引擎 ctemplate
ctemplate (Google-ctemplate)的設計哲學是輕量級,快速,且邏輯和界面分離,因此和ClearSilver和Teng是有一些差異的。比如Ctemplate就沒有模板函數,沒有條件判斷和循環語句(當然,它可以通過變通的方式來實現)。
ctemplate大體上分為兩個部分,一部分是模板,另一部分是數據字典。模板定義了界面展現的形式(V),數據字典就是填充模板的數據(M),你自己寫業務邏輯去控制界面展現(C),典型的MVC模型。
ctemplate模板中有四中標記,對應的數據字典也有不同的處理方式:
- 變量,{{變量名}},用兩個大括號包含的就是變量名,在c++代碼中,可以對變量賦值,任何類型的值都可以(如字符,整數,日期等)。
- 片斷,{{#片斷名}},片斷在數據字典中表現為一個子字典,字典是可以分級的,根字典下面有多級子字典。片斷可以處理條件判斷和循環。
- 包含,{{>模板名}}包含指的是一個模板可以包含其他模板,對應的也是一個字字典。
- 注釋,{{!注釋名}},包含注釋。
Hello {{NAME}}, You have just won ${{VALUE}}! {{#IN_CA}}Well, ${{TAXED_VALUE}}, after taxes.{{/IN_CA}}處理的C++代碼如下:
#include #include #include #include int main(int argc, char** argv) { google::TemplateDictionary dict("example"); dict.SetValue("NAME", "John Smith"); int winnings = rand() % 100000; dict.SetIntValue("VALUE", winnings); dict.SetFormattedValue("TAXED_VALUE", "%.2f", winnings * 0.83); // For now, assume everyone lives in CA. // (Try running the program with a 0 here instead!) if (1) { dict.ShowSection("IN_CA"); } google::Template* tpl = google::Template::GetTemplate("example.tpl", google::DO_NOT_STRIP); std::string output; tpl->Expand(&output, &dict); std::cout << output; return 0; }
本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!