Je recherche des bibliothèques de modèles/générateurs pour C++ qui sont similaires à par exemple. Ruby's Erb, Haml, PHP's Smarty, etc.
Ce serait génial si je portais certaines fonctionnalités de base comme les boucles, if/else, la conversion int en chaînes, etc.
Le passage de paramètres au moteur de rendu de modèle est également important si je pouvais les passer tous dans une carte de hachage au lieu d'appeler une fonction pour chacun des paramètres.
Avez-vous des recommandations?
Je peux également voir la possibilité d'incorporer des langues comme Lua, mais je n'ai pas trouvé de bibliothèque de modèles pour cela non plus.
Grantlee est un moteur de modèle de chaîne basé sur le système de modèle Django. Il est porté en C++/Qt.
NLTemplate est une petite bibliothèque de modèles C++ avec une syntaxe similaire à Django.
Avertissement: je suis l'auteur.
Wt (prononcé 'witty') est une bibliothèque C++ et un serveur d'applications pour développer et déployer des applications Web. Ce n'est pas un "framework", qui impose un mode de programmation, mais une bibliothèque.
CTPP est une bibliothèque très rapide et puissante écrite en C++. Il a des liaisons pour Perl, PHP et Python.
facebook's 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"
ClearSilver est disponible pour c. Ici est une liste de sites Web existants qui utilisent clearsilver. Mais je ne l'utilise pas moi-même.
D'une manière ou d'une autre, j'ai manqué NLTemplate lorsque je cherchais à l'origine et j'ai écrit mon propre moteur de modèle C++, avec apparemment un cas d'utilisation similaire à NLTemplate :-)
https://github.com/hughperkins/Jinja2CppLight
J'ai essayé d'utiliser le moteur de modèle et les pages Dynamic C++ fournies par le framework ffead-cpp, un exemple d'implémentation est montré sur le wiki
Jinja2C++
Description:
J'ai développé quelque chose ici modelé d'après jade pour c ++. Il prend un langage d'entrée simple mais puissant et crée une seule fonction de modèle c ++ qui écrit du HTML dans un flux.
< html
< h1 The title is ${{ params["title"] }}& >
< ul >
& for(int i = 0; i < boost::get<int>(params["items"]); ++i) {
< li Item ${{ i }}$ >
& }
>
Templtext est une petite bibliothèque de traitement de modèles de texte C++. Il prend en charge les variables de type bash (% VAR ou% {VAR}). Mais la principale caractéristique est la prise en charge de fonctions définies par l'utilisateur . La bibliothèque a été créée par moi.
besoin de la bibliothèque de regex BOOST, mais elle sera remplacée par std :: regex dans la prochaine version
Exemple 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;
Production:
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.
Exemple 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;
Production:
You have got an Apple.
You have got an orange.
English version - Apple.
German version - Apfel.
Flexible version - Apple.
Flexible version - Apfel.