In Java besteht der Standard darin, die Methode toString()
zu definieren, um eine String-Repräsentation einer Klasse zurückzugeben. Anders als das Überladen von operator<<
gibt es einen solchen Standard in C ++? Ich weiß, dass es die Methoden std::to_string()
gibt, um eine String-Repräsentation einer Zahl zu erhalten. Spricht der C ++ - Standard davon, die Methode to_string()
so zu definieren, dass sie einen ähnlichen Zweck für eine Klasse erfüllt, oder gibt es eine gängige Praxis, die von C ++ - Programmierern verfolgt wird?
Der Standardweg für diese Art von Dingen ist die Bereitstellung eines -Einfügungsoperators , so dass ein Objekt in einen Stream eingefügt werden kann - dies kann jede Art von Stream sein, beispielsweise ein Stringstream.
Wenn Sie möchten, können Sie auch eine Methode bereitstellen, die in eine Zeichenfolge konvertiert (nützlich für Ihren Einfügeoperator). Wenn Sie die Konvertierung als akzeptabel erachten, können Sie einen 'to string' -Operator angeben.
Hier ist mein Standard-Klassenbeispiel:
%Vor%Ich habe auch eine praktische Funktion, um Dinge in Strings umzuwandeln:
%Vor%Jetzt kann ich es leicht benutzen:
%Vor%Sie werden feststellen, dass die Boost Lexical Cast-Bibliothek ebenfalls entwickelt wurde für diese Art von Sache.
Hoffe, das hilft.
Der C ++ - Standard schreibt keine Möglichkeit vor, aber es sieht so aus, als gäbe es einen Vorschlag, der eine solche Option einführen könnte Generic to_string / to_wstring-Funktionen , die im Motivationsabschnitt stehen, der auch die aktuellen gebräuchlichen Praktiken hervorhebt (, die ich unten demonstriere ):
Lange haben C ++ Programmierer nach einem einfachen Weg gesucht Konvertieren eines Objekts in seine Zeichenfolgendarstellung Eine typische Antwort auf Dieses Problem bestand darin, einen lokalen ostringstream zu erstellen und das Objekt einzufügen in den Stream und dann erhalten Sie die resultierende Zeichenfolge mit dem Str Mitgliedsfunktion . Diese Lösung ist einfach, sicher, flexibel und erweiterbar, aber für etwas, das eher sollte ein einzelner Funktionsaufruf sein. C ++ 11 zur Verfügung gestellt (eine teilweise) Lösung in Form eines Satzes von überladenen to_string / to_wstring Funktionen. Leider sind diese nur auf das eingebaute beschränkt numerische Typen. Außergewöhnliche Lösungen gibt es auch - vor allem boost :: lexical_cast, das eine bidirektionale Konvertierung von Objekten und Zeichenketten, aber keine Formatierungssteuerung .
Dieses Papier schlägt eine Lösung vor:
- verallgemeinert die vorhandenen to_string / to_wstring-Funktionen für jeden Typ, der einen Stream-Ausgabeoperator und einen beliebigen basic_string bereitstellt Spezialisierung,
- bleibt konsistent und weitgehend kompatibel mit diesen Funktionen,
- bietet zusätzliche Formatierungs- und Verkettungsfunktionen,
- ist konzeptionell einfach, indem es auf der bekannten ostring-Lösung aufbaut.
Es gibt zwei Reiseberichte STLs und Herb Sutter und ich sehe nicht, dass dieses Papier in beiden erwähnt wird. Also hoffentlich wird dies in der post-Kona Mailing behandelt werden, wenn es dazu kommt aus.
Die erste Methode, die sie im Vorschlag erwähnten, würde ungefähr so aussehen: das Beispiel in dieser Antwort :
%Vor%kombiniert mit etwas ähnlich dem Beispiel von hier :
%Vor% Wir finden ein boost::lexical_cast
Beispiel in der Frage Aktivieren von Klassen zur Verwendung mit boost :: lexical_cast .
Spricht der C ++ - Standard davon, die Methode to_string () so zu definieren, dass sie für eine Klasse einen ähnlichen Zweck erfüllt,
Nein.
oder gibt es eine gängige Praxis, die von C ++ - Programmierern verfolgt wird.
Nein. Ich vermute jedoch, dass jedes Projekt eine ähnliche Funktionalität hat. Der Name und der Rückgabetyp hängen höchstwahrscheinlich von den Codierungsrichtlinien eines Projekts ab.
Bei meiner Arbeit verwenden wir
%Vor%in einer unserer Basisklassen.
Sie können etwas ähnliches für Ihr Projekt verwenden.
%Vor%in Ihrer Basisklasse (n).