使用自定义可搜索源boost :: iostreams :: stream

时间:2015-06-18 17:50:54

标签: c++ boost

如果我想使用带有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);

1 个答案:

答案 0 :(得分:0)

确切的要求记录在SeekableDevice概念下:http://www.boost.org/doc/libs/1_58_0/libs/iostreams/doc/concepts/seekable_device.html

您可以查看列出的任何模型的实现,以获取有关如何解决此问题的提示:

  • array,
  • 文件,
  • file_descriptor,
  • mapped_file所

关于dev*参数,您似乎在使用自由函数模板boost::iostreams::seek Device::seek(您为实现这一概念而实现的内容) >