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/

目录
相关文章
|
SQL Java 数据库
Spring Authorization Server 1.1 扩展实现 OAuth2 密码模式与 Spring Cloud 的整合实战(上)
Spring Authorization Server 1.1 扩展实现 OAuth2 密码模式与 Spring Cloud 的整合实战(上)
|
6月前
|
机器学习/深度学习 数据采集 算法
Python | K折交叉验证的参数优化的GradientBoost及SHAP可解释性分析回归预测算法
本教程介绍基于Python的GradientBoost回归预测算法,结合K折交叉验证与贝叶斯/随机/网格搜索进行超参数优化,并引入SHAP实现模型可解释性分析。涵盖数据预处理、模型训练、多维度评估及可视化,适用于地球科学、医学、工程、经济等多个领域的连续变量预测任务,代码与数据齐全,适合科研与实际应用。
508 2
|
6月前
|
文字识别 Docker 异构计算
面向openEuler操作系统:OCR软件应用部署流程、性能评测
本报告研究在openEuler 22.03 LTS上部署OCR技术,基于Docker容器化实现环境隔离与高效部署,结合PaddleOCR与GPU加速,完成从环境搭建到性能评测的全流程。实验表明,系统在中文识别准确率高达98.7%,单图推理仅250.1毫秒,验证了“openEuler+OCR”方案的可行性与高性能,为AI应用落地提供坚实支撑。
393 0
面向openEuler操作系统:OCR软件应用部署流程、性能评测
|
10月前
|
人工智能 前端开发 调度
基于大模型的领域场景开发:从单智能体到多智能体的React框架设计与实现
本文介绍了基于大模型的领域场景开发演进过程,从提示词工程、RAG到流程编排,再到React模式的智能体架构升级。团队通过层级指挥模式实现单智能体自主规划与工具调用,并探索多智能体协作框架,提升复杂任务处理效率与灵活性。
1626 19
基于大模型的领域场景开发:从单智能体到多智能体的React框架设计与实现
|
9月前
|
存储 安全 对象存储
10 天挑战不可能! 30TB 跨大洲云主机迁移!
客户将巴西至非洲超7000公里跨洲36台Windows虚拟机(30TB数据)迁移至南非云节点,面临网络延迟、传输慢、停机窗口短等挑战。通过HyperMotion技术实现增量同步与并发传输,结合对象存储优化,10天内完成全量及多次增量同步,停机窗口最短仅2小时,项目周期从预估6个月压缩至10天,成本不足专线方案10%,保障业务零中断,为全球跨区域迁移提供创新范本。
447 2
|
缓存 自然语言处理 Java
详解FreeMarker Template:在Spring Boot中实现动态内容生成
详解FreeMarker Template:在Spring Boot中实现动态内容生成
2886 13
|
11月前
|
人工智能 监控 数据处理
数据标注管理工具:AI燃料工厂的精益引擎
本文详解如何构建高吞吐数据标注系统,涵盖实时质检、智能调度与全息监控三大技术支柱,结合真实案例与代码实现,揭示从技术债到工程化落地的完整路径。
|
自然语言处理 API 数据可视化
阿里云升级Premier级别WhatsApp官方商业解决方案提供商,赋能全球企业高效连接30+亿用户
国内有哪些 WhatsApp Business API 官方服务商?阿里云是 Meta 认证的 Premier 级 BSP,为中国企业提供合规、智能的 WhatsApp 接入服务。
818 0
|
机器学习/深度学习 传感器 安全
【VRP问题】基于遗传算法求解带容量的车辆路径规划问题(优化目标:运输成本)附Matlab代码
【VRP问题】基于遗传算法求解带容量的车辆路径规划问题(优化目标:运输成本)附Matlab代码
|
存储 C语言 索引
ENVI IDL:熟悉IDL语法+输出多幅TIFF影像的MAX文件和MEAN文件
ENVI IDL:熟悉IDL语法+输出多幅TIFF影像的MAX文件和MEAN文件
872 0