Ho un blocco di memoria (opaco), che voglio memorizzare in un Blob in mySQL attraverso il loro adattatore C++. L'adattatore si aspetta un istream:inizializzazione di un C++ std :: istringstream da un buffer di memoria?
virtual void setBlob(unsigned int parameterIndex, std::istream * blob) = 0;
Quindi la mia domanda è: come posso creare uno std :: istream da questo blocco di memoria (digitato come char *). Non è una stringa in quanto non è terminata con null (ma ne conosco ovviamente la lunghezza).
Non riesco a trovare un modo per farlo senza copiare il mio blocco di memoria, ad esempio in una stringa std ::. Penso che questo sia un po 'dispendioso. Qualcosa del genere non funziona:
std::streambuf istringbuf(blockPtr, blockLength);
std::istringstream tmp_blob(&istringbuf);
perché std :: streambuf non ha tale costruttore. Ho visto il seguente suggerimento.
std:: istringstream tmp_blob;
tmp_blob.rdbuf()->pubsetbuf(blockPtr, blockLength);
È quello il modo corretto?
Possibile duplicato [Impostazione del buffer interno utilizzato da un flusso standard (pubsetbuf)] (http://stackoverflow.com/questions/1494182/setting-the-internal-buffer- used-by-a-standard-stream-pubsetbuf) –