C ++ Stringvorlagenbibliothek

8

Ich möchte eine einfache C ++ - String-basierte Template-Bibliothek, um Strings zur Laufzeit zu ersetzen.

Zum Beispiel werde ich

verwenden %Vor%

Zur Laufzeit möchte ich den Namen basierend auf dem tatsächlichen Namen ändern.

Ich fand ein Beispiel, www.stringtemplate.org, aber ich habe wenig Angst, wenn es um Antlr etc geht.

    
wilhelmtell 30.03.2010, 19:30
quelle

9 Antworten

14

Update: Das Projekt wurde nach Github verlegt und in CTemplate umbenannt: Ссылка

Von der neuen Projektseite:

  

wurde ursprünglich Google Templates genannt, da es als Vorlage für Google-Suchergebnisseiten verwendet wurde. Jetzt hat es einen allgemeineren Namen, der seiner gemeinschaftseigenen Natur entspricht.

Haben Sie die CTemplate-Bibliothek von Google ausprobiert? Es scheint genau das zu sein, wonach Sie suchen: Ссылка

Ihr Beispiel wäre so implementiert:

In example.tpl:

  

Mein Name ist {{name}}

In beispiel.cc:

%Vor%

Dann:

%Vor%
  

Mein Name ist John Smith

Beachten Sie, dass es auch eine Möglichkeit gibt, Vorlagen als Const-Zeichenfolgen zu schreiben, wenn Sie nicht möchten, dass Ihre Vorlagen in separaten Dateien geschrieben werden.

    
matias 30.03.2010, 20:48
quelle
5

Können Sie sprintf verwenden?

Es gibt auch boost::format , wenn Sie Boost hinzufügen möchten .

    
strager 30.03.2010 19:32
quelle
4

Wenn Sie eine Funktion haben, die alle Vorkommen einer Zeichenfolge durch eine andere Zeichenfolge ersetzt:

%Vor%

Dann können Sie das tun:

%Vor%     
Daniel Earwicker 30.03.2010 19:51
quelle
3

Wenn Sie neu in C ++ sind, wird das Hinzufügen neuer Bibliotheken (Vorlage oder anders) zu Ihrer Installation nur die Lernkurve erhöhen. Dies können Sie einfach, elegant und effizient mit den integrierten Funktionen erledigen.

Im Gegensatz zu ähnlichen Antworten macht dieser Code nur einen Durchlauf über die Eingabe und skaliert gut mit großen Wörterbüchern:

%Vor%     
Potatoswatter 31.03.2010 00:33
quelle
1

Haben Sie eine Reihe von Inline-Funktionen in Betracht gezogen, die ostringstram statt "string templates" verwenden?

%Vor%

Es gibt andere alternative Ansätze, wenn Sie mehr Allgemeingültigkeit benötigen. Zum Beispiel eine Klassenhierarchie, in der die Basis eine "Format" -Schnittstelle bereitstellt und untergeordnete Klassen diese mit der entsprechenden variierenden Implementierung implementiert.

    
Mark B 30.03.2010 20:47
quelle
0
%Vor%     
wilhelmtell 30.03.2010 19:54
quelle
0

Es könnte zu viel werden, aber Sie können sich auch boost :: spirit ansehen , und genauer gesagt, der Karma-Teil, der ein Textgenerator ist.

    
Alexandre Hamez 30.03.2010 20:00
quelle
0

Wenn Sie viele Platzhalter haben, z. B. wenn Sie eine Makrovorlage für einen Brief haben, der automatisch erweitert werden soll, wäre eine einfache Tokenisierung einfacher zu pflegen, zu implementieren und später zu erweitern. ZB

%Vor%

Wenn das Problem jedoch einfach genug ist und die Vorlage klein genug ist, gehen Sie einfach zu einer der oben genannten Antworten.

    
Sridhar Iyer 30.03.2010 20:19
quelle
0

Sie können sich Inja ansehen. Es ist eine einfache Header-Only-Vorlagen-Engine und erfüllt Ihre Anforderungen. Dort können Sie einfach anrufen

%Vor%     
klar 13.02.2018 12:50
quelle

Tags und Links