tipos template sirven que plantillas para los funciones clases c++ template-engine

sirven - template en c++ pdf



Marco de plantillas HTML de C++, biblioteca de plantillas, biblioteca de generadores de HTML (12)

Estoy buscando bibliotecas de plantillas / generadores para C ++ que sean similares a, por ejemplo. Erb de Ruby, Haml, Smarty de PHP, etc.

Sería genial si tuviera características básicas como bucles, if / else, conversión int a cadenas, etc.

El parámetro que pasa al motor de representación de la plantilla también es importante si pudiera pasarlos a todos en un mapa hash en lugar de llamar a alguna función para cada uno de los parámetros.

Tiene alguna recomendación?

También veo la posibilidad de incrustar lenguajes como Lua, pero tampoco he encontrado una biblioteca de técnicas para eso.



De alguna manera me perdí NLTemplate cuando estaba buscando originalmente, y escribí mi propio motor de plantillas C ++, con aparentemente un caso de uso similar a NLTemplate :-)

https://github.com/hughperkins/Jinja2CppLight

  • Sintaxis similar a Jinja2
  • liviano, sin dependencias en boost, qt, etc, ...
  • sustitución variable
  • para bucles
    • incluyendo anidados para bucles :-)

Desarrollé algo here modelado después de jade para c ++. Requiere un lenguaje de entrada simple pero poderoso y crea una función de plantilla única de C ++ que escribe HTML en una secuencia.

< html < h1 The title is ${{ params["title"] }}& > < ul > & for(int i = 0; i < boost::get<int>(params["items"]); ++i) { < li Item ${{ i }}$ > & } >

  • Reemplazo variable
  • Bloques de código definidos por el usuario
  • cosecha toda la potencia de c ++ (bucles, declaraciones de variables, lo que sea)
  • Súper fácil de integrar en compilaciones de origen
  • Todo lo posible hecho en tiempo de compilación
  • Sin formato intermedio (recta c + +)
  • Fácil de depurar (porque la salida de C ++)
  • Sin dependencias externas
  • Súper pequeño con menos de 600 líneas de c ++
  • Licencia GPL

He intentado usar el motor de plantillas y las páginas dinámicas en C ++ proporcionadas por el framework ffead-cpp, una implementación de ejemplo se muestra en el wiki


Una revisión rápida del proyecto mencionado.

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

ClearSilver

Teng

Templatizer

  • Sitio: http://www.lazarusid.com/libtemplate.shtml
  • Proyecto: solo descarga
  • Grupo: ninguno
  • Licencia: uso gratuito
  • Idioma: C (nivel bajo) / C ++ (interfaz) mixto
  • Última actualización: desconocido
  • Última publicación: desconocido
  • Documento: ninguno
  • Comunidad: ninguno

Plantilla HTML C ++

ctpp

  • Sitio: http://ctpp.havoc.ru/en/
  • Proyecto: solo descarga
  • Grupo: ninguno
  • Licencia: Licencia BSD
  • Idioma: C ++ con API C
  • Última actualización: 5 de octubre de 2011
  • Última publicación: Versión 2.7.2 del 5 de octubre de 2011
  • Documento: Rich
  • Comunidad: ninguno

Wt

Flate

  • Sitio: http://flate.dead-inside.org/
  • Proyecto: ninguno
  • Grupo: ninguno
  • Licencia: LGPL v2.1
  • Idioma: C
  • Última actualización: 4 de septiembre de 2010
  • Última publicación: 2.0 el 4 de septiembre de 2010
  • Documento: Pobre
  • Comunidad: ninguno

http://ctpp.havoc.ru/en/ es una biblioteca muy rápida y potente escrita en C ++. Tiene enlaces para Perl, PHP y Python.


ClearSilver está disponible para c. Here hay una lista de sitios web existentes que usan clearsilver. Pero yo no lo uso yo mismo.


Wt (pronunciado ''ingenioso'') es una biblioteca C ++ y un servidor de aplicaciones para desarrollar e implementar aplicaciones web. No es un ''marco'', que impone una forma de programación, sino una biblioteca.


NLTemplate es una pequeña biblioteca de plantillas C ++ con una sintaxis similar a Django.

  • Reemplazo variable
  • Bloques repetibles u opcionales
  • El archivo incluye
  • Licencia MIT
  • Sin dependencias externas
  • Archivo fuente único, fácil de agregar a cualquier proyecto

Descargo de responsabilidad: soy el autor.


format de facebook:

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"


Grantlee es un motor de plantillas de cadenas basado en el sistema de plantillas de Django. Está portado a C ++ / Qt.


Templtext es una pequeña biblioteca de procesamiento de plantillas de texto de C ++. Admite variables tipo bash (% VAR o% {VAR}). Pero la característica principal es un soporte de funciones definidas por el usuario . La biblioteca fue creada por mí.

  • El análisis de la plantilla
  • Reemplazo variable
  • Funciones definidas por el usuario en la plantilla
  • C ++ 11
  • Licencia GPL

necesita la biblioteca de expresiones regulares BOOST, pero se reemplazará con std :: regex en la próxima versión

Ejemplo 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;

Salida:

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.

Ejemplo 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;

Salida:

You have got an apple. You have got an orange. English version - apple. German version - Apfel. Flexible version - apple. Flexible version - Apfel.