Предоставить 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, потому что, похоже, это " textarea id = "field" onkeyup = "countChar (this)"> function countChar (val) {var len = val.value.length; if (...

Я хочу подсчитать символы в текстовой области, поэтому я просто сделал:



function countChar(val){
     var len = val.value.length;
     if (len >= 500) {
              val.value = val.value.substring(0, 500);
     } else {
              $('#charNum').text(500 - len);
     }
};

Что не так с моим фрагментом кода? Он не работает! textarea id = "field" onkeyup = "countChar (this)"> function countChar (val) {var len = val.value.length; if (...

Я хочу подсчитать символы в текстовой области, поэтому я просто сделал:



function countChar(val){
     var len = val.value.length;
     if (len >= 500) {
              val.value = val.value.substring(0, 500);
     } else {
              $('#charNum').text(500 - len);
     }
};

Что не так с моим фрагментом кода? Он не работает! Хорошо, это был почерк новичка, нужна помощь.

110
задан Filburt 9 February 2013 в 15:41
поделиться