C++ HTML模板框架,模板化库,HTML生成器库

65

我正在寻找一些类似于 Ruby 的 Erb、Haml 和 PHP 的 Smarty 等的 C++ 模板/生成库。

如果它具备循环、if/else、将 int 转换为字符串等基本功能,那就太好了。

模板渲染引擎的参数传递也很重要,如果我能够将所有参数都传递到哈希映射中,而不是为每个参数调用某个函数,那就更好了。

你有什么推荐吗?

我还可以看到嵌入 Lua 等语言的可能性,但我还没有找到相应的模板化库。


有太多的编程资源已经过时,没有更新或者是死链。 - gbjbaanb
第一个答案是社区维基,您可以更新它。 - Marcin Gil
13个回答

53

对提到的项目的快速回顾。

http://rgrz.tumblr.com/post/13808947359/review-of-html-template-engines-in-c-language

ClearSilver

Teng

Templatizer

  • 网站:http://www.lazarusid.com/libtemplate.shtml
  • 项目:仅下载
  • 组:无
  • 许可证:免费使用
  • 语言:C(低级)/C++(接口)混合
  • 最近更新时间:未知
  • 最新版本:未知
  • 文档:无
  • 社区:无

HTML模板C++

ctpp

  • 网站:http://ctpp.havoc.ru/en/
  • 项目:仅下载
  • 组:无
  • 许可证:BSD许可证
  • 语言:C++,带有C API
  • 最近更新时间:2011年10月5日
  • 最新版本:2011年10月5日发布的2.7.2版
  • 文档:丰富
  • 社区:无

Wt

Flate

  • 网站:http://flate.dead-inside.org/
  • 项目:无
  • 组:无
  • 许可证:LGPL v2.1
  • 语言:C
  • 最近更新时间:2010年9月4日
  • 最新版本:2010年9月4日的2.0版本
  • 文档:较差
  • 社区:无

Jinja2C++


现在几乎所有这些链接都已经失效了。就像雨中的泪水一样,在时间的洪流中消失了…… - Chris_F

8

Grantlee 是一种基于 Django 模板系统的字符串模板引擎,它被移植到了 C++/Qt 平台。


1
@gbjbaanb:我已经将URL更新到新位置。 - Kristian

7

NLTemplate是一个小型的C++模板库,其语法类似于Django。

  • 变量替换
  • 可重复或可选块
  • 文件包含
  • MIT许可证
  • 无外部依赖
  • 单个源文件,易于添加到任何项目中

免责声明:我是作者。


对我来说运行得非常好。谢谢分享! - Deep Shah
1
喜欢它因为它是单文件的。不过有点过时了,最后一次提交是两年前。 - Victor Sergienko
NLTemplate非常好,感谢CatNapGames!但是有一些我不喜欢的地方(抛出字符串而不是异常,缺乏nil类型块引用),所以我写了类似的东西。https://github.com/michaelainsworth/StringTemplate - magnus
以上链接似乎已经失效。 - Jaideep Shekhar

3

CTPP是一个用C++编写的非常快速和强大的库。它有Perl、PHP和Python的绑定。


文档已经过时,而且开发似乎已经停滞不前。 - Mark Stahler

3

Wt(发音为“witty”)是一个用于开发和部署Web应用程序的C++库和应用程序服务器。它不是强制编程方式的“框架”,而是一种库。


值得记住的是,我正在寻找如何将HTML模板化功能嵌入C++桌面程序中。 - Marcin Gil
我肯定会称它为一个框架。它甚至可以生成JavaScript代码。请参见http://www.webtoolkit.eu/wt/src/hello - Janus Troelsen

2

ClearSilver 可用于c语言。 这里 是使用 clearsilver 的现有网站列表,但我自己不使用。


2

Facebook的format功能:

std::cout << format("The answers are {} and {}", 23, 42); 
// => "The answers are 23 and 42"

std::map<std::string, std::string> m { {"what", "answer"}, {"value", "42"} }; 
std::cout << vformat("The only {what} is {value}", m); 
// => "The only answer is 42"

1

在最初的搜索中,我不知道NLTemplate,于是自己编写了一个C++模板引擎,与NLTemplate显然有相似的用例 :-)

https://github.com/hughperkins/Jinja2CppLight

  • Jinja2类似的语法
  • 轻量级,没有依赖于boost、qt等...
  • 变量替换
  • for循环
    • 包括嵌套的for循环 :-)

顺便提一句,我也制作了一个不同的模板引擎,基于嵌入式Lua引擎。 我认为Lua版本非常棒,因为Lua很小、很快,并且在模板中完全可以利用lua的全部功能。 请参阅github.com/hughperkins/luacpptemplater。 - Hugh Perkins
1
它根本不起作用。即使是README中的示例也是如此。 - makerj

1

我尝试过使用 ffead-cpp 框架提供的模板引擎和动态 C++ 页面,一个示例实现在 wiki 上展示。


1

Jinja2C++

描述:

  • C++14/17库
  • 支持主流编译器(Visual C++, gcc, clang)
  • 易于使用的界面。
  • 符合Jinja2规范http://jinja.pocoo.org/docs/2.10/
  • 支持模板和参数的窄字符和宽字符字符串。
  • 内置C++类型和流行json库(nlohmann、RapidJson)的反射。
  • 用户定义的可调用项。
  • 具有过滤功能(通过“|”运算符)和“if”表达式的强大全功能Jinja2表达式。
  • 大量的Jinja2标记包括宏和模板扩展。
  • 丰富的错误报告。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接