基于C++的模板引擎

摘要:
模板引擎是实现模型与视图分离的重要手段。如果您从未接触过模板引擎,您可以看到Wiki的介绍。模板引擎的流行最初是由于网站开发的需要,例如几个重要的模板引擎:我主要将它们应用于代码生成器的设计。我们可以发现,当前的模板引擎有两种不同的想法:在设计模板系统时,模板语言通常很简单,避免在模板语言中添加操作符号等。;另一个是提供强大的模板语言功能。
模板引擎(Template engine)是实现模型和视图分离的一个重要手段。如果你从未接触过模板引擎可以看看Wiki的介绍。模板引擎的流行最初是因为网站开发的需要,象比较重要的几个模板引擎:SMARTYVelocityStringTemplate都是来源于网页设计的。当然,除了网页设计,模板引擎还可以应用于其他领域,而我主要将其应用与代码生成器的设计中。

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

绝大多数模板引擎都是支持Java、PHP、Python的,这当然和模板引擎的应用领域相关。我的代码生成器是用C++写的,而且必须支持Windows平台,所以选择的范围就比较有限了,从网络上搜索了一下,似乎只有TengCT++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没有英文文档,一直就没有使用过,可能会遗漏一些新功能。

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

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

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

免责声明:文章转载自《基于C++的模板引擎》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇github 中删除/更名版本库(repository)Linux/Unix下的任务管理器top命令下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Algorithm算法库

algorithm 是C++标准程式库中的一个头文件,定义了C++ STL标准中的基础性的算法(均为函数模板)。在C++98中,共计有70个算法模板函数;在C++11中,增加了20个算法模板函数。其中有5个算法模板函数定义在头文件numeric中。 下文所称的“序列”(sequence),是指可以用迭代器顺序访问的容器。 有返回值的函数,返回值都是迭代器,...

理解BPDU Guard的意义(BPDU Guard在全局配置与接口配置上的区别)

理解BPDU Guard的意义(BPDU Guard在全局配置与接口配置上的区别)     本文截自于博主CCNP交换技术稿件内容     BPDU Guard(BPDU保护),简单的讲它的意义就是一个不该接收BPDU的端口,比如被启动了portfast的端口,一旦收到BPDU报文,那么BPDU保护功能将会立即关闭该端口,并将端口状态置为error-dis...

网站日志流量分析系统之(日志埋点)

一、概述    日志埋点分为客户端和服务器端。参考并转自:https://www.cnblogs.com/hzhuxin/p/11152805.html,如有侵权,请联系删除。)   ①客户端埋点:支持 iOS、安卓、Web/H5、微信小程序,主要用于分析 UV、PV、点击量等基本指标。例:下图是Web端的埋点技术图:       ②服务器日志:采集后端业...

fiddler Everywhere工具答疑

之前写过一篇文章介绍了fiddler Everywhere工具:未来的神器fiddler Everywhere,然后我就发到了平台上,收到了一些反馈,主要是功能咨询和对工具的看法交流。这两天特意去官方网站看了看,得到了一些新信息,所以分享一下。 先说我的看法,大概率不会流行起来。 一开始看到这个软件的GUI,非常惊喜,感觉就是我要的软件,帮助我在无代码环境...

手把手教你进行Pycharm活动模板配置

/1 前言/ 嘿,各位小伙伴大家好,最近后台很多小伙伴加小编微信,说是想使用Pycharm,除了简单的安装Pycharm和设置Pycharm解释器之外,Python环境搭建—安利Python小白的Python和Pycharm安装详细教程,安装好Pycharm后如何配置Python解释器简易教程,有个活动模板配置,小编觉得也还是蛮重要的,这里整理出来给大...

虚幻引擎 4 14 版发布

Share on Facebook  Share on Twitter  Share on Google+  Share on LinkedIn 此版包含 Epic 的数百项更新,以及 GitHub 虚幻引擎开发者社区提交的 71 项改良!特此对虚幻引擎 4.14 版本的每位贡献者表达诚挚谢意: Adam Moss(adamnv)、Alan...