Gibt es eine Standardmethode zum Konvertieren einer Klasse in eine Zeichenfolge?

8

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?

    
Ahmed A 26.10.2015, 23:39
quelle

3 Antworten

5

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.

    
Dúthomhas 26.10.2015 23:52
quelle
4

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 .

    
Shafik Yaghmour 27.10.2015 00:23
quelle
1
  

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).

    
R Sahu 26.10.2015 23:46
quelle

Tags und Links