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.
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.
Können Sie sprintf
verwenden?
Es gibt auch boost::format
, wenn Sie Boost hinzufügen möchten .
Wenn Sie eine Funktion haben, die alle Vorkommen einer Zeichenfolge durch eine andere Zeichenfolge ersetzt:
%Vor%Dann können Sie das tun:
%Vor%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%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.
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.
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.