需要一个轻量级的C ++模板引擎

时间:2012-06-15 17:43:49

标签: c++ template-engine

我需要一个非常轻量级,快速的C ++模板引擎。我一直在测试CTemplate,它符合我的需求,但它有点慢。我已经检查了本网站上推荐的许多其他模板引擎,但其中大部分都比CTemplate更复杂,我正在寻找相反的方法。我真正需要的只是简单的文本替换,但更喜欢使用现有的引擎。我还需要一个放松的许可证,最好是麻省理工学院或BSD。

编辑:已经研究过以下内容: ClearSilver, 腾 Templatizer, CTPP(这对我来说有点复杂......我对C ++和linux开发环境很新) qctemplate,等等,只需要尝试记住它们

3 个答案:

答案 0 :(得分:5)

创建了一个,因为我也不喜欢将提升作为依赖: - )

https://github.com/hughperkins/Jinja2CppLight

  • 使用Jinja2语法
  • 支持变量替换,并支持循环
  • 可以嵌套for循环: - )
  • 零依赖关系,只是c ++和标准库: - )

答案 1 :(得分:1)

您可以尝试syslandscape-tmpl

Project为C ++提供了灵活而强大的模板引擎。

树状数据结构用于存储模板变量。变量可以是int,string,list或object。

功能

  • 变量
  • for循环和嵌套for循环
  • if和nested if
  • 包含其他模板

<强>要求

C ++ 11

模板存储

目前,该引擎仅支持stringfile存储模板。

示例

#include <iostream>
#include <memory>
#include <syslandscape/tmpl/data.h>
#include <syslandscape/tmpl/engine.h>
#include <syslandscape/tmpl/string_storage.h>

using syslandscape::tmpl::data;
using syslandscape::tmpl::engine;
using syslandscape::tmpl::storage;
using syslandscape::tmpl::string_storage;

int main()
{
  std::shared_ptr<string_storage> storage = std::make_shared<string_storage>();

  storage->put_template("/greetings.html", "Hello, I'm {$person.name}.");
  storage->put_template("/city.html", "I'm from {$person.city}.");
  storage->put_template("/age.html", "I'm {$person.age} years old.");
  storage->put_template("/examples.html", "\n{$message}: "
                        "{% for item in data %}{$item}{%endfor%}");
  storage->put_template("/index.html",
                        "{%include /greetings.html%} "
                        "{%include /city.html%} "
                        "{%include /age.html%} "
                        "{%include /examples.html%}");

  engine e;
  e.set_storage(storage);

  data model;
  model["person"]["name"] = "Alex";
  model["person"]["city"] = "Montana";
  model["person"]["age"] = 3;
  model["message"] = "List example";
  model["data"].append("Answer is");
  model["data"].append(" 42");


  std::cout << e.process("/index.html", model) << std::endl;

  return 0;
}

答案 2 :(得分:-6)

可能boostloki对你有好处