模板引擎 ctemplate

openkk 12年前發布 | 24K 次閱讀 C語言 模板引擎

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;
}

項目主頁:http://www.baiduhome.net/lib/view/home/1322965320890

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!