Каков тип основного потока наддува :: iostreams :: filtering_stream?

У меня есть этот поток, который выполняет декомпрессию с помощью Boost.Iostreams:

struct istream_zlib
: public boost::iostreams::filtering_stream<boost::iostreams::input, char>
{
istream_zlib(std::istream& in)
{
push(boost::iostreams::zlib_decompressor());
push(in);
}
};

Теперь я хотел бы получить доступ к базовому потоку (std::istream& in) позже. Наивно думал, что запрашиваю std::istream через component() сделал бы это, но указатель я вернусь null:

auto ptr = component<std::istream>(1); // ptr is null!

Какой тип я должен предоставить component() для этого?

2

Решение

Это не реально, так как нет istream будет вытолкнут в filtering_stream (для моего повышения 1.48 это будет boost::iostreams::detail::mode_adapter<boost::iostreams::input, std::istream> например), вы можете проверить его тип по component_type функция. Однако понятия не имею, зачем вам нужно stream от filtering_stream, так как вы отправляете ссылку — у вас должен быть этот объект в местах, где вы его используете filtering_stream,

Также вы можете использовать reference_wrapper для этого случая (т.е. push(boost::ref(in));), а затем получить его с помощью компонента

auto ptr = component<boost::reference_wrapper<std::istream>>(1);
3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector