web-dev-qa-db-ja.com

C ++ HTMLテンプレートフレームワーク、テンプレート化ライブラリ、HTMLジェネレーターライブラリ

たとえば、C++用のテンプレート/ジェネレーターライブラリを探しています。 RubyのErb、Haml、PHPのSmartyなど.

ループ、if/else、文字列へのint変換などのいくつかの基本的な機能があれば素晴らしいでしょう。

テンプレートレンダリングエンジンへのパラメーターの受け渡しは、各パラメーターに対して何らかの関数を呼び出す代わりに、すべてをハッシュマップで渡すことができる場合にも重要です。

何かお勧めはありますか?

Luaのような言語を埋め込む可能性もありますが、そのためのテンプレートライブラリも見つかりませんでした。

63
Marcin Gil

言及されたプロジェクトの簡単なレビュー。

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

クリアシルバー

テン

テンプラタイザー

  • サイト: http://www.lazarusid.com/libtemplate.shtml
  • プロジェクト:ダウンロードのみ
  • グループ:なし
  • ライセンス:無料で使用できます
  • 言語:C(低レベル)/ C++(インターフェース)混合
  • 最終更新:不明
  • 最終リリース:不明
  • ドキュメント:なし
  • コミュニティ:なし

HTMLテンプレートC++

ctpp

  • サイト: http://ctpp.havoc.ru/en/
  • プロジェクト:ダウンロードのみ
  • グループ:なし
  • ライセンス:BSDライセンス
  • 言語:C APIを使用したC++
  • 最終更新日:2011年10月5日
  • 最終リリース:2011年10月5日のバージョン2.7.2
  • ドキュメント:リッチ
  • コミュニティ:なし

Wt

フラット

  • サイト: http://flate.dead-inside.org/
  • プロジェクト:なし
  • グループ:なし
  • ライセンス:LGPL v2.1
  • 言語:C
  • 最終更新日:2010年9月4日
  • 最終リリース:2010年9月4日2.0
  • ドキュメント:悪い
  • コミュニティ:なし

Jinja2C++

51
Marcin Gil

Grantlee はDjangoテンプレートシステムに基づく文字列テンプレートエンジンです。C++/Qtに移植されています。

7
Kristian

NLTemplate は、Djangoに似た構文を持つ小さなC++テンプレートライブラリです。

  • 変数置換
  • 繰り返し可能なブロックまたはオプションのブロック
  • ファイルインクルード
  • MITライセンス
  • 外部依存関係なし
  • 任意のプロジェクトに簡単に追加できる単一のソースファイル

免責事項:私は著者です。

6
Tomas Andrle

Wt (「ウィッティ」と発音)は、Webアプリケーションを開発および展開するためのC++ライブラリおよびアプリケーションサーバーです。それはプログラミングの方法を強制する「フレームワーク」ではなく、ライブラリです。

3
yesraaj

[〜#〜] ctpp [〜#〜] は、C++で記述された非常に高速で強力なライブラリです。 Perl、PHP、Python。

3
villie2

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"
2
kirill_igum

ClearSilver はcで使用可能です。 ここ はclearsilverを使用する既存のWebサイトのリストです。しかし、私はそれを自分では使いません。

2
wimh

どういうわけか、最初に検索していたときにNLTemplateを見逃し、NLTemplateと明らかに似たユースケースで、独自のC++テンプレートエンジンを作成しました:-)

https://github.com/hughperkins/Jinja2CppLight

  • Jinja2のような構文
  • 軽量、boost、qtなどに依存しない...
  • 変数置換
  • forループ
    • ネストされたforループを含む:-)
1
Hugh Perkins

Ffead-cppフレームワークが提供するテンプレートエンジンとダイナミックC++ページを使用してみました。実装例は wiki

1
Mark

Jinja2C++

説明:

  • C++ 14/17ライブラリ
  • メインストリームコンパイラ(Visual C++、gcc、clang)をサポート
  • 使いやすいインターフェース。
  • Jinja2仕様への準拠 http://jinja.pocoo.org/docs/2.10/
  • テンプレートと-パラメータの両方で、ナロー文字とワイド文字の両方の文字列をサポートします。
  • C++型および一般的なjsonライブラリ(nlohmann、RapidJson)の組み込みリフレクション。
  • ユーザー定義の呼び出し可能オブジェクト。
  • フィルタリング(「|」演算子による)および「if」式を備えた強力なフル機能のJinja2式。
  • Jinja2タグの大きなセットには、マクロとテンプレート拡張が含まれます。
  • 豊富なエラー報告。
1

ctemplate

https://code.google.com/p/ctemplate/?redir=1

新しいBSDライセンス

1
OJW

私は何かを開発しました こちら C++の jade をモデルにしています。シンプルだが強力な入力言語を受け取り、HTMLをストリームに書き込む単一のc ++テンプレート関数を作成します。

< html
  < h1 The title is ${{ params["title"] }}& >
    < ul >
    & for(int i = 0; i < boost::get<int>(params["items"]); ++i) {
      < li Item ${{ i }}$ >
    & }
>
  • 変数置換
  • ユーザー定義のコードブロック
  • c ++のフルパワーを獲得します(ループ、変数宣言、名前を付けます)
  • ソースビルドに簡単に統合できます
  • コンパイル時に可能なすべてのこと
  • 中間フォーマットなし(ストレートC++)
  • デバッグが簡単(C++出力のため)
  • 外部依存関係なし
  • 600行未満のC++
  • GPLライセンス
0
burner

Templtext は小さな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;

出力:

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.

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

出力:

You have got an Apple.
You have got an orange.
English version - Apple.
German version  - Apfel.
Flexible version - Apple.
Flexible version - Apfel.
0
trodevel