我有这个使用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()
提供哪种类型的内容?
答案 0 :(得分:3)
这不是真的,因为istream
不会被推入filtering_stream
(例如,我的提升1.48会boost::iostreams::detail::mode_adapter<boost::iostreams::input, std::istream>
),你可以通过{{1}检查它的类型功能。但是,我没有任何想法,为什么您需要从component_type
获取stream
,因为您发送了引用 - 您应该将此对象放在使用此filtering_stream
的位置。
此外,您可以在这种情况下使用filtering_stream
(即reference_wrapper
),然后使用
push(boost::ref(in));