C++;HTML模板框架、模板化库、HTML生成器库 我正在寻找C++的模板/生成器库,这些库类似于Ruby的Erb、HAML、PHP的SMARTY等。

C++;HTML模板框架、模板化库、HTML生成器库 我正在寻找C++的模板/生成器库,这些库类似于Ruby的Erb、HAML、PHP的SMARTY等。,c++,template-engine,C++,Template Engine,如果我能让它具备一些基本功能,比如循环、if/else、int到字符串的转换等,那就太好了 如果我可以在哈希映射中传递所有参数,而不是为每个参数调用某个函数,那么传递到模板渲染引擎的参数也很重要 你有什么建议吗 我也可以看到嵌入Lua这样的语言的可能性,但是我也没有找到一个模板库。是使用clearsilver的现有网站列表。但是我自己不使用它。快速回顾一下提到的项目 清银 地点: 项目: 组: 许可证:新的BSD许可证 语言:C 最后更新:2011年11月28日 最后版本:0.10.5,20

如果我能让它具备一些基本功能,比如循环、if/else、int到字符串的转换等,那就太好了

如果我可以在哈希映射中传递所有参数,而不是为每个参数调用某个函数,那么传递到模板渲染引擎的参数也很重要

你有什么建议吗


我也可以看到嵌入Lua这样的语言的可能性,但是我也没有找到一个模板库。是使用clearsilver的现有网站列表。但是我自己不使用它。

快速回顾一下提到的项目

清银
  • 地点:
  • 项目:
  • 组:
  • 许可证:新的BSD许可证
  • 语言:C
  • 最后更新:2011年11月28日
  • 最后版本:0.10.5,2007年7月12日
  • 文件:Rich

  • 社区:中等((发音为'witty')是一个用于开发和部署Web应用程序的C++库和应用服务器,它不是一个“框架”,它强制编程,而是一个库。

    < P>是用C++编写的一个非常强大的库。它有Perl、PHP和Python的绑定。对于C++和Qt.< /P> < P>我尝试使用FEADAD CPP框架提供的模板引擎和动态C++页面,在

    模板上显示了一个示例实现

    新的BSD许可证facebook的:

    std::cout“答案是23和42”
    映射m{{“what”,“answer”},{“value”,“42”};
    标准::cout“唯一的答案是42”
     > p>是一个小型的C++模板库,语法类似于django。
    
    • 变量替换
    • 可重复或可选块
    • 文件包括
    • 麻省理工学院许可
    • 没有外部依赖关系
    • 单一源文件,易于添加到任何项目

    免责声明:我是作者。

    < p>不知为什么,我最初搜索时错过了NLFATE,并编写了自己的C++模板引擎,显然与NLPTAME:-/P>类似的用例。

    • 类Jinja2语法
    • 轻量级,不依赖于boost、qt等
    • 变量替换
    • for循环
      • 包括嵌套for循环:-)
    • 我开发了一些C++模型。它需要一个简单但强大的输入语言,并创建一个单一的C++模板函数,它将HTML写入流。
      < html
        < h1 The title is ${{ params["title"] }}& >
          < ul >
          & for(int i = 0; i < boost::get<int>(params["items"]); ++i) {
            < li Item ${{ i }}$ >
          & }
      >
      
      
      
        &对于(int i=0;i & } >
      • 变量替换
      • 用户定义代码块
      • 获取C++的全部权限(循环、变量声明,您命名)
      • 超级容易集成到源代码构建中
      • 所有可能的事情都在编译时完成
      • 无中间格式(纯c++)
      • 易于调试(因为C++输出)
      • 没有外部依赖关系
      • 超小,不到600行c++
      • GPL许可

      是一个小型C++文本模板处理库。它支持类似bash的变量(%VAR或%{VAR})。但主要功能是支持用户定义的函数。图书馆是我创建的

      • 模板解析
      • 变量替换
      • 模板中的用户定义函数
      • C++11
      • GPL许可证
      需要BOOST正则表达式库,但在下一个版本中它将被std::regex替换

      例1:

      using namespace templtext;
      
      Templ * t = new Templ( "Dear %SALUTATION %NAME. I would like to invite you for %TEXT. Sincerely yours, %MYNAME." );
      
      std::map<std::string, std::string> tokens01 =
      {
              { "SALUTATION", "Mr." },
              { "NAME", "John Doe" },
              { "TEXT", "an interview" },
              { "MYNAME", "Ty Coon" }
      };
      
      std::map<std::string, std::string> tokens02 =
      {
              { "SALUTATION", "Sweetheart" },
              { "NAME", "Mary" },
              { "TEXT", "a cup of coffee" },
              { "MYNAME", "Bob" }
      };
      
      std::cout << t->format( tokens01 ) << std::endl;
      std::cout << t->format( tokens02 ) << std::endl;
      
      例2:

      using namespace templtext;
      
      std::unique_ptr<Templ> tf1( new Templ( "You have got an $decode( 1 )." ) );
      std::unique_ptr<Templ> tf2( new Templ( "You have got an $decode( 2 )." ) );
      std::unique_ptr<Templ> tf3( new Templ( "English version - $decode_loc( 1, EN )." ) );
      std::unique_ptr<Templ> tf4( new Templ( "German version  - $decode_loc( 1, DE )." ) );
      std::unique_ptr<Templ> tf5( new Templ( "Flexible version - $decode_loc( 1, %LANG )." ) );
      
      tf1->set_func_proc( func );
      tf2->set_func_proc( func );
      tf3->set_func_proc( func );
      tf4->set_func_proc( func );
      tf5->set_func_proc( func );
      
      Templ::MapKeyValue map1 =
      {
              { "LANG", "EN" }
      };
      
      Templ::MapKeyValue map2 =
      {
              { "LANG", "DE" }
      };
      
      std::cout << tf1->format() << std::endl;
      std::cout << tf2->format() << std::endl;
      std::cout << tf3->format() << std::endl;
      std::cout << tf4->format() << std::endl;
      std::cout << tf5->format( map1 ) << std::endl;
      std::cout << tf5->format( map2 ) << std::endl;
      

      Jinja2C++

      • 地点:
      • 项目:
      • 柯南软件包:
      • 许可证:MPL-2.0
      • 语言:C++14/17
      • 最后更新:2019年10月1日
      • 最后版本:1.0.0于2019年10月1日发布
      • 文件:中等
      说明:

      • C++14/17库
      • 支持主流编译器(Visual C++、GCC、CLAN)
      • 易于使用的界面
      • 与Jinja2规范的一致性
      • 模板和参数都支持窄字符串和宽字符串
      • 对C++类型和流行JSON库(NLHHMAN,RapidJson)的内置反射。
      • 用户定义的可调用项
      • 功能强大的全功能Jinja2表达式,带有过滤(通过“|”运算符)和“if”表达式
      • 大量的Jinja2标记包括宏和模板扩展
      • 丰富的错误报告

      值得回忆,但是我正在研究如何将HTML模板化功能嵌入到C++桌面程序中。我肯定把它称为框架。它甚至生成JavaScript代码。请看文档已经过时,而且似乎开发已经停滞了太多过时、未更新或死链接。第一个答案是community wiki,您可以更新它。顺便说一下,我还制作了一个不同的模板,基于嵌入式lua引擎。我认为lua版本很酷,因为lua很小,速度也很快,lua的全部功能都可以在模板github.com/hughperkins/luacppTemplater中使用。它根本不起作用。甚至自述文件中的示例。@gbjbaanb:我已将url更新到新位置。对我来说效果很好。谢谢分享!喜欢它是一个文件。虽然有点过时,上次提交是2年前。NLTemplate非常好,谢谢CatNapGames!有一些事情我不喜欢(抛出字符串而不是异常,缺少nil类型的块引用),所以我写了一些类似的东西。上述链接似乎已失效。
      Dear Mr. John Doe. I would like to invite you for an interview. Sincerely yours, Ty Coon.
      Dear Sweetheart Mary. I would like to invite you for a cup of coffee. Sincerely yours, Bob.
      
      using namespace templtext;
      
      std::unique_ptr<Templ> tf1( new Templ( "You have got an $decode( 1 )." ) );
      std::unique_ptr<Templ> tf2( new Templ( "You have got an $decode( 2 )." ) );
      std::unique_ptr<Templ> tf3( new Templ( "English version - $decode_loc( 1, EN )." ) );
      std::unique_ptr<Templ> tf4( new Templ( "German version  - $decode_loc( 1, DE )." ) );
      std::unique_ptr<Templ> tf5( new Templ( "Flexible version - $decode_loc( 1, %LANG )." ) );
      
      tf1->set_func_proc( func );
      tf2->set_func_proc( func );
      tf3->set_func_proc( func );
      tf4->set_func_proc( func );
      tf5->set_func_proc( func );
      
      Templ::MapKeyValue map1 =
      {
              { "LANG", "EN" }
      };
      
      Templ::MapKeyValue map2 =
      {
              { "LANG", "DE" }
      };
      
      std::cout << tf1->format() << std::endl;
      std::cout << tf2->format() << std::endl;
      std::cout << tf3->format() << std::endl;
      std::cout << tf4->format() << std::endl;
      std::cout << tf5->format( map1 ) << std::endl;
      std::cout << tf5->format( map2 ) << std::endl;
      
      You have got an apple.
      You have got an orange.
      English version - apple.
      German version  - Apfel.
      Flexible version - apple.
      Flexible version - Apfel.