Предоставить std :: istream интерфейс к существующему буферу без его копирования

У меня есть буфер символов фиксированной длины, и я хотел бы передать его функции, которая принимает 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 решение. Спасибо всем.

11
задан Martin Stone 22 March 2011 в 16:46
поделиться