Здравствуйте! Моя проблема может быть описана следующий путь:
У меня есть некоторые данные, которые на самом деле являются массивом и могли быть представлены как char* data
с некоторыми size
У меня также есть некоторый унаследованный код (функция), которая берет некоторый краткий обзор std::istream
возразите как параметрический усилитель и использование что поток для получения данных для работы.
Так, мой вопрос следующий - каков был бы простой способ отобразить мой data
некоторым std::istream
возразите так, чтобы я мог передать его своей функции? Я думал о создании a std::stringstream
объект от моего data
, но это означает копировать и (как я предполагаю), не лучшее решение.
Любые идеи, как это могло быть сделано так, чтобы мой std::istream
воздействует на data
непосредственно?
Спасибо.
Если вы хотите действительно создать свой собственный поток, я бы обратил внимание на библиотеку Boost.Iostreams. Она позволяет легко создавать собственные объекты потока.
Использовать строковый поток:
#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;
}