Использование 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;
    }     
};

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

Спасибо

1 ответ

Решение

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

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

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

Другие вопросы по тегам