模板引擎(Template engine)是实现模型和视图分离的一个重要手段。如果你从未接触过模板引擎可以看看Wiki的介绍。模板引擎的流行最初是因为网站开发的需要,象比较重要的几个模板引擎:SMARTY、Velocity、StringTemplate都是来源于网页设计的。当然,除了网页设计,模板引擎还可以应用于其他领域,而我主要将其应用与代码生成器的设计中。

有关模板引擎,我推荐StringTemplate的作者Terence Parr 写的一篇英文论文。Terence Parr是一个大学教授,写的文章自然学术性比较强,较难懂,但是很有参考价值。借助这篇文章的分析,我们可以发现当前模板引擎有着两种不同的思路:一种是严格将模型和视图分开的,设计模板系统时往往提供的模板语言比较简单,避免在模板语言中加入运算符号等,另一种是提供强大的模板语言功能,模板语言具有类似高级语言的功能,如各种条件判断语句,甚至数学运算能力。显然从模板编写者的角度看,后者具有更强大的功能,几乎无所不能,但是安全性不如前者,模板的编写者更容易利用系统漏洞做模板系统设计者没有想到的事情。这个问题仁者见仁,智者见智,好在由很多的模板系统可以选择。

绝大多数模板引擎都是支持Java、PHP、Python的,这当然和模板引擎的应用领域相关。我的代码生成器是用C++写的,而且必须支持Windows平台,所以选择的范围就比较有限了,从网络上搜索了一下,似乎只有Teng、CT++和Google CTemplate可以使用了。我对3个系统进行了简单的评估,并实际使用过CT++和CTemplate,现在总结一下自己的心得,希望对大家有一些帮助。

1、操作系统的支持
我的主要工作是在Windows上的,而模板引擎绝大多数是面向Unix/Linux的,这和我的需求有一定距离。当初曾经下载过Teng,但是折腾了半天也没有能够让其在Visual Studio 2003下成功编译,所以就放弃了,后来将CT++ 1.8简单地处理了一下就可以跑了,很开心。而Google CTemplate更提供了完全的Windows支持,这对于我这样的用户当然是非常省心了。

2、软件开发的活跃度
这些软件都是开源的,软件开发的活跃度当然是我关心的,有的工具刚开始用的时候很开心,但是后来开发者没有兴趣不玩了,而又没有人接手,BUG也无法更新了,就比较苦了,典型的象TurboPower。Teng似乎已经很长时间不更新了,CT++一直在更新,但是开发者是俄罗斯人,全部文档是俄文的,包括程序注释,以前1.8还有英文文档,从2.0以后就没有了,虽然最近承诺2.4以后会报告英文文档,但是我担心他哪天不高兴就不玩了,所以最后下定决心转到CTemplate去了。CTemplate虽然是Google的,而且据说Google内部也在使用,但是在模板引擎领域的名气却不大,好像作者的热情仍然很高,持续更新,而且可能很快要升级到1.0版本了,这给我很大的信心。

3、模板语言的功能
在我看来,模板语言的功能越强,提供的函数越多,它可能越受模板编写者的欢迎,但是可能不符合模型和视图严格分离的原则。Teng和CT++都属于模板语言功能强的一类,象Teng甚至提供了大量的运算符,而CTemplate显然是严格按照模型和视图分离原则设计的,它甚至没有提供if/else这样在其他模板系统中都有的功能。如前所述,这个问题仁者见仁,智者见智,不争论了。下面简单地列个表比较一下。由于CT++ 2没有英文文档,一直就没有使用过,可能会遗漏一些新功能。

Teng CT++ CTemplate
变量 支持 支持 支持
函数 支持 支持 支持(Modifier)
包含 支持 支持 支持
条件语句 支持 支持 不支持
循环 支持 支持 支持
计算 支持 不支持 不支持
赋值 支持 不支持 不支持
注释 支持 支持 支持
安全性设计 不支持 不支持 支持
用户定义函数 不支持 支持 支持

4、C++ API
基本的API几个软件都差不多,我觉得CTemplate更完善一些,特别喜欢它的调试功能。

总体来说,我对CT++还是有些难舍,但是综合考虑之后还是决定转到CTemplate上。

转载于:https://www.cnblogs.com/zealsoft/archive/2008/09/17/1292870.html

基于C++的模板引擎相关推荐

  1. java velocity是什么意思_基于 Java 的模板引擎Velocity快速入门

    最近使用Velocity模板引擎,写一个maven项目Coding生成工具. 对基于Java的模板引擎Velocity的demo总结如下: Step1. 创建Maven项目,添加如下velocity的 ...

  2. 基于模板引擎的代码生成器Smart Code预览

    概述 国内写代码生成器的不少,可以说很多公司都有自己的代码生成器,好用的却不多,可定制性不强,始终不及CodeSmith或MyGeneration.最近园子里也发了不少的代码生成器,其中henry的C ...

  3. 模板引擎:VelocityFreeMarker(转)

    Velocity,名称字面翻译为:速度.速率.迅速,用在Web开发里,用过的人可能不多,大都基本知道和在使用Struts,到底Velocity和Struts(Taglib和Tiles)是如何联系?在技 ...

  4. html模板引擎 字符串长度,Web前端模板引擎の字符串模板

    这是一个系列文章,将会介绍目前Web前端领域里用到的三种模板引擎技术,它们分别是: 基于字符串的模板 基于Dom操作的模板 基于虚拟Dom的模板 本文是这个系列的第一篇,着重介绍基于字符串的模板引擎的 ...

  5. 【工具】模板引擎 Velocity

    Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象. 当Veloci ...

  6. twig模板引擎使用php,Twig模板引擎用法入门教程_PHP

    本文实例讲述了Twig模板引擎用法.分享给大家供大家参考,具体如下: 介绍 Twig是一个灵活.高效并且安全的PHP模板引擎. 如果你使用过Smarty.Django或者Jinja这类基于文本的模板引 ...

  7. Velocity模板引擎的简单使用

    一 简介 Velocity 是一个基于 Java 的模板引擎,它允许任何人仅仅简单的使用模板语言来引用由 Java 代码定义的对象,从而实现界面和 Java 代码的分离,使得界面设计人员可以和 Jav ...

  8. OSCHina技术导向:Java模板引擎velocity

    OSChina 采用 velocity 作为页面模板 Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template langua ...

  9. 【ST4】Java 中的模板引擎 StringTemplate

    1.概述 StringTemplate是一种基于java的模板引擎库,类似于velocity,FreeMarker.可以用于生成源代码.web页面.电子邮件等多种样式的文本.选择StringTempl ...

  10. 模板引擎 Velocity

    为什么80%的码农都做不了架构师?>>>    Velocity简介 Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语 ...

最新文章

  1. 这个GAN没见过猪,却能把狗变成猪
  2. 简单说说Linux中valgrind进行内存检测
  3. [译]用AngularJS构建大型ASP.NET单页应用(二)
  4. php网站跨站脚本监测,基于PHP的在线跨站脚本检测工具.pdf
  5. SQL Server遍历表(临时表)
  6. c# 提取程序中的资源文件 .exe .resources .resx
  7. 研磨设计模式-设计模式的基础-设计模式是什么
  8. html css手册,CSS 参考手册
  9. 2022年十大突破性技术,“无密码”排名第一
  10. C++定义一个对象和new一个对象的区别与联系
  11. 小程序新爆点,小程序能分享朋友圈了
  12. 苹果回忆:为证明 iPhone 结实,乔布斯拿起手机就往地上摔
  13. RocketMQ系列---消息消费者及消费方式
  14. jQuery源码解析(架构与依赖模块)
  15. 百度为什么打不开!最新消息~
  16. 使用Oracle透明网关(Gataway)操作SQL Server
  17. 最大的郁闷,关于psp的升级问题
  18. 合肥男子到诊所看病死亡后遭医生埋尸灭迹(图)
  19. 关于 行高lineheight的概念及与Vertical-align、内容框、基线等的关系
  20. 用CSS如何实现两个球相交的粘粘动画效果

热门文章

  1. matlab padarray,MATLAB中padarray函数用法
  2. python格式化输出类型_Python格式化输出format方法需要限定数据类型吗?
  3. android下拉分页加载,Android LoadMoreListView+SwipeRefreshLayout(分页下拉)基本结构
  4. mysql 5.7 error log_MySQL · 特性分析 · 5.7 error log 时区和系统时区不同
  5. sql语句mysql_MySQL基本的Sql语句
  6. 算法与数据结构1800题 之字符串(一)
  7. Linux开机启动一些知识点
  8. 《精通LabVIEW虚拟仪器程序设计与案例实现》一2.6 VI的创建与编辑
  9. 部分转 Java读取ini配置
  10. 第十二周项目2 - 摩托车继承自行车和机动车