Boost.Iostreams против перегрузки iostream/streambuf для битового потока ввода-вывода

Для моей текущей задачи мне нужна возможность чтения / записи (в основном на основе файлов) битовых потоков. Хотя это более или менее тривиальная задача, если она написана на стандартном C/C++, я хотел бы переписать код, используя более общий подход, перегружая и используя стандартный STL iostream или аналогичный, чтобы я мог написать что-то вроде

writeHeader();
{
    ofstream outfile ("test.bin");
    outfile << true; // Write 1 bit
    outfile << false; // Write 1 bit
    outfile << (char)0x42; // Write 8 bits
}

Однако я не уверен, по какой дороге идти:

  1. Используя Boost.IOStream или
  2. Получите непосредственно из streambuf или iostream.

До сих пор мне никогда не приходилось создавать / предоставлять свои собственные потоковые классы, но я хочу улучшить свои знания...

Может быть, кто-то может дать некоторые указатели или подсказки, какой способ предпочитать и почему!?

Спасибо!

1 ответ

Решение

Лучше всего сделать новый класс потока и класс буфера потока. Используйте пользовательский класс потока для перегрузки операторов вывода, чтобы поместить один бит в пользовательский буфер потока.

Причина в том, что C++ не поддерживает меньшие объекты, чем один байт (char). Даже bool Тип не является одним битом, так как он должен быть адресуемым.

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