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