C++ - Реализация моего собственного потока

Здравствуйте! Моя проблема может быть описана следующий путь:

У меня есть некоторые данные, которые на самом деле являются массивом и могли быть представлены как char* data с некоторыми size

У меня также есть некоторый унаследованный код (функция), которая берет некоторый краткий обзор std::istream возразите как параметрический усилитель и использование что поток для получения данных для работы.

Так, мой вопрос следующий - каков был бы простой способ отобразить мой data некоторым std::istream возразите так, чтобы я мог передать его своей функции? Я думал о создании a std::stringstream объект от моего data, но это означает копировать и (как я предполагаю), не лучшее решение.

Любые идеи, как это могло быть сделано так, чтобы мой std::istream воздействует на data непосредственно?

Спасибо.

10
задан Yippie-Ki-Yay 6 June 2010 в 23:40
поделиться

2 ответа

Если вы хотите действительно создать свой собственный поток, я бы обратил внимание на библиотеку Boost.Iostreams. Она позволяет легко создавать собственные объекты потока.

10
ответ дан 3 December 2019 в 21:19
поделиться

Использовать строковый поток:

#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;
}
2
ответ дан 3 December 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: