5、ctemplate简介

简介: 1、linux下的web开发,动态页面生成很费周折,通常利用cgi接受请求,然后返回页面给请求端。代码逻辑和显示逻辑写在一起,是一件很痛苦的事情。C++里的google ctemplate,便是解决这个问题。

1、linux下的web开发,动态页面生成很费周折,通常利用cgi接受请求,然后返回页面给请求端。代码逻辑和显示逻辑写在一起,是一件很痛苦的事情C++google ctemplate便是解决这个问题。【1

ctemplate解决的主要问题是将文字表达和逻辑分离开来:文字模板解决如何用合适的文字和形式来表示问题,而逻辑问题则由文字模板的调用者在源代码中完成。

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

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

变量,{{变量名}},用两个大括号包含的就是变量名,在c++代码中,可以对变量赋值,任何类型的值都可以(如字符,整数,日期等)。

片断,{{#片断名}},片断在数据字典中表现为一个子字典,字典是可以分级的,根字典下面有多级子字典。片断可以处理条件判断和循环

包含,{{>模板名}}包含指的是一个模板可以包含其他模板,对应的也是一个字字典。

注释,{{!注释名}},包含注释。

3、示例程序

模板

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif example.tpl
Hello{{NAME}},
You have just won ${{VALUE}}!
{{#IN_CA}}
Well, ${{TAXED_VALUE}}, after taxes.
{{/IN_CA}}

字典逻辑

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif .cpp
#include<stdlib.h>
#include
<string>
#include
<iostream>
#include
<ctemplate/template.h>

int main(int argc,char** argv)
{
ctemplate::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");
}
std::
string output;
ctemplate::ExpandTemplate(
"example.tpl", ctemplate::DO_NOT_STRIP, &dict, &output);
std::cout
<< output;
return 0;
}

运行结果

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif View Code
HelloJohn Smith,
You have just won $
89383!

Well, $
74187.89, after taxes.

4、说明,编译时:

g++ -g -o test_ct test_template.cpp -lctemplate

要加ctemplate静态库来包含所引用的文件。

参考

1http://www.blogjava.net/xiaomage234/archive/2007/12/24/170174.html

2http://baike.baidu.com/view/5835966.htm

3http://zsulwj.blog.163.com/blog/static/35326925200811934454946/

4ctemplate安装包下载地址:

http://code.google.com/p/google-ctemplate/downloads/list

5】示例程序

http://code.google.com/p/google-ctemplate/

目录
相关文章
|
JSON 网络协议 机器人
ROSBridge简介以及理解使用(下)
ROSBridge简介以及理解使用(下)
1453 0
|
XML 安全 网络协议
netconf简介
netconf简要
|
2月前
|
算法 程序员 编译器
【C/C++】C/C++编程——C/C++简介
【C/C++】C/C++编程——C/C++简介
20 0
|
6月前
|
存储 算法 内存技术
多媒体系统简介
一、多媒体系统简介 多媒体系统是指能够处理和展示多种媒体信息的计算机系统。它可以处理和播放音频、视频、图像等多种形式的媒体数据,并提供交互式的操作和用户界面。多媒体系统广泛应用于娱乐、教育、广告、通信等领域。 多媒体系统通常由以下几个组成部分构成: 1. 媒体输入设备:用于将外部的媒体数据输入到计算机系统中,如麦克风、摄像头、扫描仪等。 2. 媒体处理软件:用于对媒体数据进行处理和编辑的软件,如音频编辑软件、视频编辑软件、图像处理软件等。 3. 媒体存储设备:用于存储媒体数据的设备,如硬盘、光盘、闪存等。 4. 媒体输出设备:用于将处理后的媒体数据输出到外部设备或显示器上,如音箱、显示器、投影
152 0
|
并行计算 API 调度
TOPI 简介
TOPI 简介
113 0
|
安全 算法 网络安全
虚拟专用网简介
本文重点讲解虚拟专用网的理论知识,后续文章对具体虚拟专用网进行讲解(包括原理和配置),欢迎持续关注和订阅专栏。
944 0
|
网络协议 开发工具 Android开发
AndroidDevTools简介
来源:http://www.androiddevtools.cn/ Android SDK在线更新镜像服务器 中国科学院开源协会镜像站地址: IPV4/IPV6: http://mirrors.
2859 0
|
网络协议 机器人 Java
ROSBridge简介以及理解使用(上)
ROSBridge简介以及理解使用(上)
2259 0
ROSBridge简介以及理解使用(上)
|
C#
C#中的NameValueCollection简介
NameValueCollection继承自NameObjectCollectionBase,并且和一般的键值对不同的是,它支持集合中出现相同的Key。 引用:using System.Collections.
1713 0
|
Java Windows Unix