C++ boost::iostreams::filtering\u istream是否允许搜索?

C++ boost::iostreams::filtering\u istream是否允许搜索?,c++,boost,C++,Boost,我正在尝试编写一个支持搜索的Boost iostreams过滤器。我的过滤器似乎工作正常(很好,它可以编译),但当它试图在底层文件上搜索时,我得到了一个“无随机访问”异常,这让我感到非常惊讶 果然,它在测试用例中似乎不起作用(Ubuntu 14.04;boost 1.54): #包括 #包括 名称空间io=boost::iostreams; main() { std::ifstream输入_文件(“hi”); io::过滤\流内流; instream.push(输入文件); 输入文件.excep

我正在尝试编写一个支持搜索的Boost iostreams过滤器。我的过滤器似乎工作正常(很好,它可以编译),但当它试图在底层文件上搜索时,我得到了一个“无随机访问”异常,这让我感到非常惊讶

果然,它在测试用例中似乎不起作用(Ubuntu 14.04;boost 1.54):

#包括
#包括
名称空间io=boost::iostreams;
main()
{
std::ifstream输入_文件(“hi”);
io::过滤\流内流;
instream.push(输入文件);
输入文件.exceptions(std::ifstream::failbit | std::ifstream::badbit);
流内异常(std::ifstream::failbit | std::ifstream::badbit);
//这很有效
输入_文件。参见kg(0);
//这并不重要
河道内seekg(0);
}
touch hi
并使用
g++-o test\u seek test\u seek.cc编译


任何关于如何使用底层可搜索文件在
过滤\u istream
上搜索的想法?

要支持搜索,需要通过标记输入\u可搜索定义底层设备的功能。然后,所有过滤器和设备必须支持查找,否则无法编译代码。在下面的示例中,您的筛选器必须是可查找且已定义的标记可查找的\u filter\u标记才能编译

namespace io = boost::iostreams;    
io::filtering_stream<io::input_seekable> input(YourFilter() | boost::ref(input_file));
namespace io=boost::iostreams;
io::filtering_流输入(YourFilter()| boost::ref(输入_文件));

你能试试io::filtering_stream吗?@lrm29是的,成功了!
namespace io = boost::iostreams;    
io::filtering_stream<io::input_seekable> input(YourFilter() | boost::ref(input_file));