2010-06-06 10 views
10

Hallo! Mein Problem kann folgendermaßen beschrieben werden:C++ - Implementieren eines eigenen Streams

ich einige Daten, die tatsächlich ein Array und könnte als char* data mit einigen size

vertreten sein Ich habe auch einige Legacy-Code (Funktion), die einige dauert Zusammenfassung std::istream Objekt als Parameter und verwendet diesen Datenstrom zum Abrufen von Daten zu betreiben.

Also, meine Frage ist die folgende - Was wäre die einfache Möglichkeit, meine data zu einigen std::istream Objekt zuordnen, so dass ich es an meine Funktion übergeben kann? Ich dachte über ein std::stringstream Objekt von meinem data, aber das bedeutet kopieren und (wie ich annehme) ist nicht die beste Lösung.

Irgendwelche Ideen, wie dies getan werden könnte, so dass meine std::istream auf die data direkt funktioniert?

Vielen Dank.

Antwort

10

Wenn Sie Ihren eigenen Stream erstellen möchten, würde ich mir die Boost.Iostreams Bibliothek ansehen. Es macht es einfach, eigene Stream-Objekte zu erstellen.

+0

und IIRC, hat bereits die Kleber für Sachen aus einem std :: vector oder einem Array ziehen. – Thanatos

2

Verwenden Stringstrom:

#include <sstream> 

int main() 
{ 
    char[] data = "PLOP PLOP PLOP"; 
    int  size = 13; // PS I know this is not the same as strlen(data); 

    std::stringstream stream(std::string(data, size)); 

    // use stream as an istream; 
} 

Wenn Sie wollen echte effecient werden Sie direkt mit dem Strompuffer Dreck kann. Ich habe nicht versucht und nicht einen Compiler mit zu testen, aber das folowing sollte funktionieren:

#include <sstream> 

int main() 
{ 
    char[] data = "PLOP PLOP PLOP"; 
    int  size = 13; // PS I know this is not the same as strlen(data); 

    std::stringstream stream; 
    stream.rdbuf()->pubsetbuf(data, size); 

    // use stream as an istream; 
} 
Verwandte Themen