Я пытаюсь использовать фильтры сжатия iostreams для записи в файл с помощью оператора вставки потока (<<). Название «filtering_ostreambuf» предполагает, что это должно вести себя как поток, но оператор << не определен для этого класса. Вот код, который явно не компилируется. </p>
#include <boost/iostreams/filter/lzma.hpp>
#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/device/file.hpp>
namespace io = boost::iostreams;
int main() {
io::filtering_ostreambuf out;
io::file_sink ofs("output.xz");
out.push(ofs);
out.push(io::lzma_compressor());
for (int i=0; i<16; ++i) {
out << i << std::endl;
}
return 0;
}
Я попытался использовать поток строк в качестве «источника» и использовать для этого функцию повышения iostreams copy (), как в примере для распаковки gzip. Но (1) это не сработает и (2) даже если это сработало, мне это кажется слишком многословным и не похоже, что это будет очень эффективно.
Есть ли способ использовать boost iostreams, чтобы я мог просто нормально записывать в цепочку фильтров, как если бы это был поток? Я хочу использовать << not write (). </p>