gpt4 book ai didi

c++ - boost::iostreams::filtering_istream 是否允许搜索?

转载 作者:太空宇宙 更新时间:2023-11-04 13:47:07 25 4
gpt4 key购买 nike

我正在尝试编写一个支持查找的 Boost iostreams 过滤器。我的过滤器似乎工作正常(好吧,它编译),但当它试图在底层文件上查找并得到“非随机访问”异常时,我感到非常惊讶。

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

#include <fstream>
#include <boost/iostreams/filtering_stream.hpp>

namespace io = boost::iostreams;

main()
{
std::ifstream input_file("hi");
io::filtering_istream instream;

instream.push(input_file);

input_file.exceptions(std::ifstream::failbit | std::ifstream::badbit);
instream.exceptions(std::ifstream::failbit | std::ifstream::badbit);

// this works
input_file.seekg(0);

// this doesn't
instream.seekg(0);
}

touch hi 并使用 g++ -o test_seek test_seek.cc 编译

关于如何使用底层可搜索文件在 filtering_istream 上搜索有什么想法吗?

最佳答案

要支持搜索,需要通过标签input_seekable 定义底层设备的能力。然后所有的过滤器和设备都必须支持查找,否则代码无法编译。在下面的示例中,YourFilter 必须是可搜索的并且定义了标签 seekable_filter_tag 才能编译。

namespace io = boost::iostreams;    
io::filtering_stream<io::input_seekable> input(YourFilter() | boost::ref(input_file));

关于c++ - boost::iostreams::filtering_istream 是否允许搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25413523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com