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?
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:
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:
Es gibt einige Unterschiede zwischen snprintf
und boost::format
hinsichtlich der Formatspezifikation, aber Ihr Beispiel funktioniert mit beiden.
Die fmt-Bibliothek implementiert genau das, String-Formatierung mit variadischen Vorlagen. Beispiel:
%Vor%Haftungsausschluss : Ich bin der Autor der Bibliothek.
Tags und Links c++ c++11 templates variadic-templates string-formatting