J'ai un bloc de mémoire (opaque), que je veux stocker dans un blob dans mySQL via leur adaptateur C++. L'adaptateur attend un istream:initialiser un C++ std :: istringstream à partir d'un tampon dans la mémoire?
virtual void setBlob(unsigned int parameterIndex, std::istream * blob) = 0;
Donc, ma question est la suivante: comment puis-je créer un std :: istream de ce bloc de mémoire (typée comme char *). Ce n'est pas une chaîne car elle n'est pas terminée par un caractère nul (mais je connais sa longueur bien sûr).
Je ne pouvais pas trouver un moyen de le faire sans copier mon bloc de mémoire par exemple dans une chaîne std :: string. Je pense que c'est un peu inutile. Quelque chose comme ceci ne fonctionne pas:
std::streambuf istringbuf(blockPtr, blockLength);
std::istringstream tmp_blob(&istringbuf);
parce que std :: streambuf n'a pas un tel constructeur. J'ai vu la suggestion suivante.
std:: istringstream tmp_blob;
tmp_blob.rdbuf()->pubsetbuf(blockPtr, blockLength);
Est-ce la bonne façon?
double possible de [Réglage de la mémoire tampon interne utilisé par un courant standard (pubsetbuf)] (http://stackoverflow.com/questions/1494182/setting-the-internal-buffer- -ou-standard-stream-pubsetbuf) –