У меня есть буфер символов фиксированной длины, и я хотел бы передать его функции, которая принимает std :: istream &. Как я могу это сделать, не копируя буфер?
Если это означает создание пользовательского streambuf, я думаю, что буду жить с копией. Мне просто интересно, не упускаю ли я чего-то простого.
Вот что я делаю сейчас (что делает ненужную копию):
void loadFromBuffer(const char* buff, size_t len) {
std::istringstream is(std::string(buff, len)); // BUFFER COPIED HERE :(
load(is);
}
Изменить:
Для записи, вот простое решение, использующее boost.Iostreams :
#include
#include
void loadFromBuffer2(char* buff, size_t len) {
typedef boost::iostreams::stream array_stream;
array_stream is(buff, len);
load(is);
}
Я принял ответ Boost.Iostreams, потому что это кажется «правильным» решением, однако оно не компилируется на моей платформе (Android NDK), поэтому в итоге я использовал устаревший std :: istrstream решение. Спасибо всем.