ctemplate 模板引擎

我要开发同款
匿名用户2008年11月19日
32阅读
开发技术C/C++
所属分类程序开发、模板引擎
授权协议未知

作品详情

ctemplate(Google-ctemplate)的设计哲学是轻量级,快速,且逻辑和界面分离,因此和ClearSilver和Teng是有一些差异的。比如Ctemplate就没有模板函数,没有条件判断和循环语句(当然,它可以通过变通的方式来实现)。

ctemplate大体上分为两个部分,一部分是模板,另一部分是数据字典。模板定义了界面展现的形式(V),数据字典就是填充模板的数据(M),你自己写业务逻辑去控制界面展现(C),典型的MVC模型。

ctemplate模板中有四中标记,对应的数据字典也有不同的处理方式:

变量,{{变量名}},用两个大括号包含的就是变量名,在c++代码中,可以对变量赋值,任何类型的值都可以(如字符,整数,日期等)。片断,{{#片断名}},片断在数据字典中表现为一个子字典,字典是可以分级的,根字典下面有多级子字典。片断可以处理条件判断和循环。包含,{{>模板名}}包含指的是一个模板可以包含其他模板,对应的也是一个字字典。注释,{{!注释名}},包含注释。

一份演示了完整四种标记的例子如下:

Hello{{NAME}},Youhavejustwon${{VALUE}}!{{#IN_CA}}Well,${{TAXED_VALUE}},aftertaxes.{{/IN_CA}}

处理的C++代码如下:

#include#include#include#includeintmain(intargc,char**argv){google::TemplateDictionarydict("example");dict.SetValue("NAME","JohnSmith");intwinnings=rand()%100000;dict.SetIntValue("VALUE",winnings);dict.SetFormattedValue("TAXED_VALUE","%.2f",winnings*0.83);//Fornow,assumeeveryonelivesinCA.//(Tryrunningtheprogramwitha0hereinstead!)if(1){dict.ShowSection("IN_CA");}google::Template*tpl=google::Template::GetTemplate("example.tpl",google::DO_NOT_STRIP);std::stringoutput;tpl->Expand(&output,&dict);std::cout<<output;return0;}

 

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论