2011-01-06 5 views
0

Ich habe eine Image-Klasse, die die folgende Implementierung hatC++ eine Zeichenfolge (serialisiert Objekt) aus Ostream bekommen

friend std::ostream& operator << (std::ostream &os,Image* &img); 

So kann ich es Serialisierung von

ostm << img; // which will write an string into the ostream. 

Aufruf Ist es möglich zu bekommen, dass String aus dem Ostream oder serialisieren Sie es direkt in ein String-Objekt?

Danke!

Die Lösungen funktionierten wie ein Charme. Ich danke dir sehr!

+1

Meinst du wirklich 'Image * & img'? Für die Ausgabe wäre ein "const Image &" konventioneller. –

+0

Ja, das ist, was der ursprüngliche Code sagt. –

+0

Bitte senden Sie den vollständigen Code; Es ist nicht möglich, Ihren 'Operator <<' zu debuggen, ohne dessen Implementierung sehen zu können. –

Antwort

1

Ja, Sie können eine std::ostringstream verwenden.

z.

#include <sstream> 
#include <string> 
#include <stdexcept> 

std::string Serialize(const Image& img) 
{ 
    std::ostringstream oss; 

    if (!(oss << img)) 
    { 
     throw std::runtime_error("Failed to serialize image"); 
    } 

    return oss.str(); 
} 
0

Vermutlich Ihr eigentliches Objekt ist ein iostream oder ein stringstream. Wenn ein iostream, können Sie dies tun:

std::iostream ss; 
ss << "Some text\nlol"; 
std::string all_of_it((std::istreambuf_iterator<char>(ss)), std::istreambuf_iterator<char>()); 
std::cout << all_of_it; // Outputs: "Some text", then "lol" on a new line; 

Sie benötigen die istreambuf_iterator, damit die Anforderung für einen bidirektionalen Strom wie iostream. Wann immer Sie sowohl extrahieren als auch einfügen, sollten Sie dies verwenden, oder eine stringstream (oder eine fstream wenn Sie mit Dateien arbeiten).

Für eine stringstream, verwenden Sie einfach seine .str() Mitgliedsfunktion, um seinen Puffer als string zu erhalten.

Verwandte Themen