So erstellen Sie einen variantenbasierten Template-String-Formatierer

8

Wir müssen Strings ständig formatieren. Es wäre so schön, sagen zu können:

%Vor%

Gibt es einen C ++ Weg? Einige Alternativen, die ich in Betracht gezogen habe:

  • snprintf : verwendet rohe char Puffer. Im modernen C ++ - Code nicht nett.
  • std::stringstream : unterstützt keine Formatierungszeichenfolgen, stattdessen müssen Sie plumpe iomanip-Objekte in den Stream einfügen.
  • boost::format : verwendet eine Ad-hoc-Operatorüberladung von % , um die Argumente anzugeben. Hässlich.

Gibt es nicht einen besseren Weg mit variadischen Vorlagen jetzt, da wir C ++ 11 haben?

    
isarandi 19.05.2014, 16:12
quelle

2 Antworten

11

Es kann sicherlich in C ++ 11 mit variadischen Vorlagen geschrieben werden. Es ist am besten, etwas, das bereits existiert, zu verpacken, als zu versuchen, das Ganze selbst zu schreiben. Wenn Sie bereits Boost verwenden, ist es ganz einfach, boost::format folgendermaßen umzubrechen:

%Vor%

Sie können dies so verwenden, wie Sie es wollten:

%Vor%

Wenn Sie Boost nicht verwenden möchten (aber Sie sollten es wirklich tun), können Sie auch snprintf umbrechen. Es ist ein wenig komplizierter und fehleranfällig, da wir char-Puffer und die nicht typensichere variable Längenargumentliste des alten Stils verwalten müssen. Es wird ein bisschen sauberer mit unique_ptr 's:

%Vor%

Es gibt einige Unterschiede zwischen snprintf und boost::format hinsichtlich der Formatspezifikation, aber Ihr Beispiel funktioniert mit beiden.

    
isarandi 19.05.2014 16:12
quelle
1

Die fmt-Bibliothek implementiert genau das, String-Formatierung mit variadischen Vorlagen. Beispiel:

%Vor%

Haftungsausschluss : Ich bin der Autor der Bibliothek.

    
vitaut 25.11.2017 01:05
quelle