如果我想使用带有boost :: iostreams :: stream的自定义可搜索源,需要实现哪些方法?我已查看Boost's tutorial for source buffers that aren't seekable,并尝试将代码修改为input_seekable
并添加seek
函数,如this tutorial。不幸的是,这导致我的编译器抱怨缺少get
函数,我无法找到文档(从编译器错误消息,我可以弄清楚签名是什么,但那就是它)。这个功能应该做什么?我还需要实现其他任何功能吗?
此外,编译器希望我有三个输入参数seek
;第一个是*dev
,我认为它将由stream
本身提供。
设备标题:
class SourceBuffer
{
private:
FILE *file;
public:
typedef char char_type;
typedef boost::iostreams::input_seekable category;
SourceBuffer(const char *fileName);
SourceBuffer();
~SourceBuffer();
std::streamsize read(char *s, std::streamsize n);
boost::iostreams::stream_offset seek(boost::iostreams::stream_offset off, std::ios_base::seekdir way);
void open(const char *fileName);
void close();
protected:
}
用法:
boost::iostreams::stream<SourceBuffer> *example;
example = new boost::iostreams::stream<SourceBuffer>(fileName);
答案 0 :(得分:0)
确切的要求记录在SeekableDevice
概念下:http://www.boost.org/doc/libs/1_58_0/libs/iostreams/doc/concepts/seekable_device.html
您可以查看列出的任何模型的实现,以获取有关如何解决此问题的提示:
关于dev*
参数,您似乎在使用自由函数模板boost::iostreams::seek