Можно ли использовать 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;
}
};
Моя проблема сейчас в том, как я могу подключить источник и приемник?
Спасибо
Boost.Iostreams, кажется, не тот инструмент для работы здесь.
Цель механизма источника и приемника — дать вам возможность указать где данные сериализуются в — например, хотите ли вы записать в файл, место в памяти или порт ввода / вывода.
Что вы хотите указать как сериализуется определенный вид данных. Правильный инструмент в Boost для этого будет Boost.Serialization.
Других решений пока нет …