18 февраля 2009

Container as a stream

Как быть, если есть данные в контейнере, а нужно получить доступ к нему в виде стандартного потока (basic_iostream)? Например, данные лежат в памяти, а нужно скормить их какой-нибудь функции из third party библиотеки, которая принимает iostream?
typedef std::deque<char> container;
container c;
В примерах boost::iostreams есть замечательная штука, не знаю почему ее не включили в саму библиотеку - адаптер для контейнеров. Использовать можно так:
#include <boost/../libs/iostreams/example/container_device.hpp>

typedef boost::iostreams::example::container_device<container> device;
boost::iostreams::stream<device> stream(c);

stream << "hello, world";
stream >> variable;

2 комментария:

Анонимный комментирует...

Только дебилы пользаются библиотекой, функции которой принимают iostream в качестве параметра.

Andriy комментирует...

Честно говоря, я вижу только одно очевидное применение этому механизму - перенаправить какое-либо из стандартных устройств в такой вот контейнер.
В конечном счете внешне запись выглядит весьма красиво и лаконично, вот только typedef-ы :-)