2012-06-15 10 views
8

Necesito un motor de plantillas C++ muy liviano y rápido. He estado probando CTemplate y se adapta a mis necesidades, pero es un poco lento. He revisado muchos de los otros motores de plantillas que se han recomendado en este sitio, pero la mayoría de ellos son más complejos que CTemplate, y estoy buscando lo contrario. Todo lo que realmente necesito es una simple sustitución de texto, pero preferiría usar un motor existente. También necesito una licencia relajada, preferiblemente MIT o BSD.Necesito un motor de plantillas de C++ liviano

EDIT: Se han estudiado los siguientes: ClearSilver, Teng, Templatizer, CTPP (Esto es un poco complejo para mí ... bastante nuevo en C++ y el entorno Linux dev) qctemplate, y más , sólo hay que tratar de recordarlos

+0

¿Qué otras plantillas probaste? No quiere que las personas repitan lo que ya probó. – CppLearner

+1

¿Cuáles son los casos de uso? ¿Incrustado? ¿Desarrollo de software? ¿Ejemplos de lo que quiere que haga el motor? – jxh

+2

Aquí hay una: https://github.com/catnapgames/NLTemplate - archivo de origen único y muy básico. –

Respuesta

-4

Tal boost o loki es bueno para usted

+3

Si el impulso es liviano, entonces, ¿qué es pesado? Asker quería peso ligero. – Protheus

+0

Puede cortar partes no deseadas si realmente no desea tener archivos hpp no ​​deseados. No es tan difícil, lo hizo dos o más veces. Fue posible activar el registro de archivos abiertos durante el proceso de compilación para poder detectar qué archivos son necesarios y cuáles no. – SOReader

+5

Boost y loki son sobre el otro tipo de plantillas. –

5

creado uno, ya que no les gusta tener demasiado impulso como una dependencia :-)

https://github.com/hughperkins/Jinja2CppLight

  • utiliza sintaxis Jinja2
  • apoya la sustitución de variables, y para el bucle
  • pueden anidarse para-bucles :-)
  • dependencias
  • cero, simplemente C++ y bibliotecas estándar :-)
+0

¿Entiendo correctamente que depende de una instalación local de Python? –

+1

No necesita Python, no usa Python. Implementa una versión muy ligera de Jinja2, en C++, para C++. –

1

Puede intentar syslandscape-tmpl.

El proyecto proporciona un motor de plantilla flexible y potente para C++.

Una estructura de datos tipo árbol se utiliza para almacenar variables de plantilla. Las variables pueden ser int, string, list u object. Características

  • las variables
  • para bucles y bucles anidados para
  • si y jerárquico, si
  • incluyen otras plantillas

Requisitos

C++ 11

almacenamiento de plantillas

Actualmente el motor sólo es compatible con string y file de almacenamiento para las plantillas.

Ejemplo

#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; 
} 
Cuestiones relacionadas