C ++ verfügt über geeignete Zeichenfolgen, sodass Sie diese auch verwenden können. Sie befinden sich in der Standard-Header-Zeichenfolge. #include <string>, um sie zu verwenden. Keine strcat / strcpy-Pufferüberläufe mehr; keine fehlenden Nullterminatoren mehr; keine unordentliche manuelle Speicherverwaltung mehr; richtig gezählte Zeichenfolgen mit korrekter Wertesemantik.
C ++ kann Bools auch in lesbare Darstellungen konvertieren. Wir haben früher bei den iostream-Beispielen Hinweise darauf gesehen, aber sie sind etwas eingeschränkt, da sie nur den Text auf die Konsole (oder mit fstreams, einer Datei) übertragen können. Glücklicherweise waren die Designer von C ++ keine vollständigen Idioten. Wir haben auch iostreams, die nicht von der Konsole oder einer Datei, sondern von einem automatisch verwalteten Zeichenfolgenpuffer unterstützt werden. Sie werden Stringstreams genannt. #include <sstream>, um sie zu erhalten. Dann können wir sagen:
std::string bool_as_text(bool b)
{
std::stringstream converter;
converter << std::boolalpha << b; // flag boolalpha calls converter.setf(std::ios_base::boolalpha)
return converter.str();
}
Natürlich wollen wir das alles nicht wirklich tippen. Glücklicherweise verfügt C ++ auch über eine praktische Drittanbieter-Bibliothek namens Boost , die uns hier weiterhelfen kann. Boost hat eine nette Funktion namens lexical_cast. Wir können es so verwenden:
boost::lexical_cast<std::string>(my_bool)
Nun ist es wahr zu sagen, dass dies ein höherer Overhead ist als irgendein Makro; Stringstreams behandeln Gebietsschemas, die Sie möglicherweise nicht interessieren, und erstellen eine dynamische Zeichenfolge (mit Speicherzuweisung), während das Makro eine Literalzeichenfolge liefern kann, wodurch dies vermieden wird. Auf der anderen Seite kann die Stringstream-Methode jedoch für sehr viele Konvertierungen zwischen druckbaren und internen Darstellungen verwendet werden. Sie können sie rückwärts laufen lassen; boost :: lexical_cast <bool> ("true") macht zum Beispiel das Richtige. Sie können sie mit Zahlen und tatsächlich jedem Typ mit den richtig formatierten E / A-Operatoren verwenden. Sie sind also sehr vielseitig und nützlich.
Und wenn nach all dem Ihre Profilerstellung und Ihr Benchmarking ergeben, dass die lexical_casts ein inakzeptabler Engpass sind , sollten Sie in Betracht ziehen, einen Makro-Horror zu machen.