Ich versuche, eine Funktion zu verwenden, die in einer Libelle von Drittanbietern enthalten ist, und erwarte ein Eingabe-Stream-Objekt, in dem binäre Dateidaten transportiert werden.
Die Unterschrift sieht so aus:
%Vor%Da ich diese lib / Funktion von Drittanbietern nicht ändern / ändern kann, muss ich meinen Code anpassen. In der aufrufenden Stelle habe ich einen std :: vector, der die Daten enthält, die in einem istream-Objekt übergeben werden sollen. Momentan kopiere ich den Vektor in den Stream, indem ich darüber iteriere und den & lt; & lt; Operator zum byteweisen Kopieren.
Ich vermute stark, dass es einen effektiveren / bequemeren Weg geben könnte, aber bisher nichts brauchbares finden konnte. Jede Hilfe / Ihre Gedanken werden sehr geschätzt.
Am besten, JR
Sie können vector
der Zeichen als zugrunde liegenden Puffer für einen Eingabestream verwenden, ohne den Inhalt des Vektors zu kopieren:
@NeilKirk meldet, dass die oben genannte Methode zur Verwendung von pubsetbuf
nicht portierbar ist .
Ein portabler Weg ist die Verwendung von boost::iostreams
library. So erstellen Sie einen Eingabestream aus einem Vektor, ohne dessen Inhalt zu kopieren:
Tags und Links c++ vector copy istream unsigned-char