Я изучаю C++ (исходя из курсовой работы C и Java), и сегодня я хочу написать класс, который фильтрует байты, взятые из общего потока, и записывает его вывод в другой поток.C++ Лучший подход к фильтрации байтов в потоке
Чтобы быть совпадающим, допустим, что я хочу создать класс, который base64-кодирует вход и записывает вывод в stdout.
В Баш я хотел бы написать:
echo "some input data" | base64
В C++ я хочу реализовать класс MyB64Encoder
, который будет вести себя так:
std::cout << myB64EncoderObject << "some input data";
//Alternatively, is it possible to make it like this?
std::cout << MyB64Encoder << "some input data";
Дело в том, то myB64EncoderObject
имеет, конечно, для поддержания внутреннего состояния и внутреннего буфера. Чтобы предотвратить блокирование и чрезмерное использование памяти, он должен иметь возможность читать и обрабатывать небольшие фрагменты данных и выводить каждый из них сразу после его обработки.
Есть несколько вещей, чтобы заботиться о:
- Объект должен ждать выходной поток, чтобы иметь возможность получать данные
- Объект должен бросить ошибку, если нет чтения потока от него (вроде как сломанная труба?)
Какой был бы лучший подход к такой проблеме, с точки зрения эффективности? Как реализовать его в современном C++ 1x?
Оберните ручей (или оберните ручейщик). –