Ответ 1
Если вы смотрите на создание собственного потока, я бы посмотрел библиотеку
Здравствуйте! Моя проблема может быть описана следующим образом:
У меня есть некоторые данные, которые на самом деле являются массивом и могут быть представлены как char* data
с некоторыми size
У меня также есть некоторый унаследованный код (функция), который принимает некоторый абстрактный объект std::istream
как параметр и использует этот поток для извлечения данных для работы.
Итак, мой вопрос следующий: какой бы простой способ сопоставить мой data
с некоторым объектом std::istream
, чтобы я мог передать его моей функции? Я думал о создании объекта std::stringstream
из моего data
, но это означает, что копирование и (как я полагаю) не лучшее решение.
Любые идеи, как это можно сделать, чтобы my std::istream
работал с data
напрямую?
Спасибо.
Если вы смотрите на создание собственного потока, я бы посмотрел библиотеку
Определенно, это не самый простой способ, но на всякий случай кто-то хочет понять, как работают std-потоки внутри, это, по-видимому, очень хорошее представление о том, как вы можете качать самостоятельно:
Использовать поток строк:
#include <sstream>
int main()
{
char[] data = "PLOP PLOP PLOP";
int size = 13; // PS I know this is not the same as strlen(data);
std::stringstream stream(std::string(data, size));
// use stream as an istream;
}
Если вы хотите быть реальным эффективным, вы можете напрямую использовать буфер потока. Я не пробовал это и не имею компилятора для тестирования, но следующее должно работать:
#include <sstream>
int main()
{
char[] data = "PLOP PLOP PLOP";
int size = 13; // PS I know this is not the same as strlen(data);
std::stringstream stream;
stream.rdbuf()->pubsetbuf(data, size);
// use stream as an istream;
}