【问题标题】:implementing simple input stream实现简单的输入流
【发布时间】:2011-08-04 14:07:57
【问题描述】:

我想写一个简单的istream 对象,它可以简单地转换另一个istream

我只想实现readline(它将从原始流中读取一行,对其进行处理,并返回处理后的行),并有一些通用代码在read 上使用我的读取行,缓存它,并给出所需的字节数作为输出。

是否有任何课程可以让我这样做?

例如

struct mystream : istreamByReadLine {
  istream& s;
  mystream(istream& _s):s(_s){}
  virtual string getline() {
    string line;
    getline(s,line);
    f(line);
    return line;
  }
}

class istreamByReadLine : istream {
  ... // implementing everything needed to be istream compatible, using my
  ... // getline() virtual method
}

【问题讨论】:

    标签: c++ iostream


    【解决方案1】:

    你看过boost.iostreams吗?它为您完成了大部分繁重的工作(可能不是针对您的确切用例,而是针对一般的 C++ 标准库流)。

    【讨论】:

      【解决方案2】:

      你确定这是要走的路吗?在类似的情况下,我已经 或者定义一个类(例如Line),使用>> 运算符 做了我想做的,然后读了,例如:

      Line line
      while ( source >> line ) ...
      

      类本身可以很简单,只需一个std::string 成员和operator std::string() const 函数 返回它。所有的过滤工作都将在 std::istream& operator>>( std::istream&, Line& dest ) 功能。或者我在前面安装了一个过滤streambuf 正常streambuf; Boost iostream 对 这个。

      【讨论】:

      • 我想将我的流提供给接收istream的其他函数。
      • 在这种情况下,您必须使用istream。如果这些其他程序应该看到过滤后的数据,那么您需要一个过滤streambuf;如果他们应该看到原始数据,那么Line 的解决方案会更好。
      猜你喜欢
      • 1970-01-01
      • 2016-08-24
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      • 2012-02-15
      • 2014-07-02
      相关资源
      最近更新 更多