ctemplateの詳細


ctemplateの詳細
ctemplate(Google-ctemplate)の設計哲学は軽量級で、迅速で、論理とインタフェースが分離しているため、ClearSilverとTengとはいくつかの違いがある.たとえばCtemplateにはテンプレート関数がなく,条件判断やループ文がない(もちろん,融通性のある方法で実現できる).
ctemplateは大きく2つの部分に分けられ、一部はテンプレートであり、もう一部はデータ辞書である.テンプレートはインタフェースの表示形式(V)を定義して、データ辞書はテンプレートのデータ(M)を充填して、あなたは自分でビジネスロジックを書いてインタフェースの表示(C)を制御して、典型的なMVCモデルです.
ctemplateテンプレートには4つのタグがあり、対応するデータ辞書にも異なる処理方法があります.
  • 変数,{{変数名}}は,2つの括弧で変数名を含み,c++コードでは変数に値を割り当てることができ,任意のタイプの値(文字,整数,日付など)でもよい.
  • 断片,{#断片名}},断片はデータ辞書にサブ辞書として表現され,辞書は階層化可能であり,ルート辞書の下にはマルチレベルサブ辞書がある.断片は条件判断とループを処理できる.
  • には,{>テンプレート名}}が含まれているのは,1つのテンプレートが他のテンプレートを含むことができ,対応するのも1つの字辞書である.
  • 注釈,{!注釈名}},注釈を含む.

  • 完全な4つのタグの例を以下に示します.
    Hello {{NAME}},
    You have just won ${{VALUE}}!
    {{#IN_CA}}Well, ${{TAXED_VALUE}}, after taxes.{{/IN_CA}}

    処理するC++コードは以下の通りである.
    #include 
    #include
    #include
    #include
    int main(int argc, char** argv) {
    google::TemplateDictionary dict("example");
    dict.SetValue("NAME", "John Smith");
    int winnings = rand() % 100000;
    dict.SetIntValue("VALUE", winnings);
    dict.SetFormattedValue("TAXED_VALUE", "%.2f", winnings * 0.83);
    // For now, assume everyone lives in CA.
    // (Try running the program with a 0 here instead!)
    if (1) {
    dict.ShowSection("IN_CA");
    }
    google::Template* tpl = google::Template::GetTemplate("example.tpl",
    google::DO_NOT_STRIP);
    std::string output;
    tpl->Expand(&output, &dict);
    std::cout << output;
    return 0;
    }