У меня есть блок памяти (непрозрачный), который я хочу сохранить в Blob в mySQL через их С++-адаптер. Адаптер ожидает istream:
virtual void setBlob(unsigned int parameterIndex, std::istream * blob) = 0;
Итак, мой вопрос: как я могу создать std:: istream из этого блока памяти (напечатано как char *). Это не строка, поскольку она не заканчивается на нуль (но я знаю ее длину, конечно).
Я не мог найти способ сделать это, не копируя блок памяти, например, в std::string. Я думаю, что это немного расточительно. Что-то вроде этого не работает:
std::streambuf istringbuf(blockPtr, blockLength);
std::istringstream tmp_blob(&istringbuf);
потому что std:: streambuf не имеет такого конструктора. Я видел следующее предложение.
std:: istringstream tmp_blob;
tmp_blob.rdbuf()->pubsetbuf(blockPtr, blockLength);
Правильно ли это?