Использование boost :: stream для более сложных / структурированных типов, чем chars?

Можно ли использовать boost :: iostreams для более сложных / структурированных типов?

То, что я хочу сделать, это потоковое изображение, но они должны иметь некоторые аннотации, такие как ширина, высота, глубина цвета, … Моя первая идея состоит в том, чтобы использовать структуру вместо char или wchar

namespace io = boost::iostreams;

struct SingleImageStream{
unsigned int  width;
unsigned int height;
unsigned char colordepth;
unsigned char* frame;
};class SingleImageSource {
public:
typedef struct SingleImageStream            char_type;
typedef io::source_tag  category;

std::streamsize read(struct SingleImageStream* s, std::streamsize n)
{
char* frame = new char[640*480];
std::fill( frame, frame + sizeof( frame ), 0 );

s->width = 640;
s->height = 480;

std::copy(frame, frame + sizeof(frame), s->frame);

return -1;
}
};class SingleImageSink {
public:
typedef struct SingleImageStream        char_type;
typedef io::sink_tag                    category;

std::streamsize write(const struct SingleImageStream* s, std::streamsize n)
{
std::cout << "Frame width : " << s->width << " frame height : " << s->height << std::endl;
return n;
}
};

Моя проблема сейчас в том, как я могу подключить источник и приемник?

Спасибо

0

Решение

Boost.Iostreams, кажется, не тот инструмент для работы здесь.

Цель механизма источника и приемника — дать вам возможность указать где данные сериализуются в — например, хотите ли вы записать в файл, место в памяти или порт ввода / вывода.

Что вы хотите указать как сериализуется определенный вид данных. Правильный инструмент в Boost для этого будет Boost.Serialization.

1

Другие решения

Других решений пока нет …