boost :: iostreams :: filtering_stream的底层流的类型是什么?

时间:2013-09-03 08:33:22

标签: c++ boost c++11 boost-iostreams

我有这个使用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::istreamcomponent()会这样做,但我回来的指针是null

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

我应该向component()提供哪种类型的内容?

1 个答案:

答案 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));