动态修改输入流数据

时间:2014-06-12 20:56:10

标签: c++ iostream

我想实现一个 std :: stream 修饰符/解析器,即动态进行数据操作。

是否可以以流操纵器的形式创建它?例如,我想从stdin中删除所有行注释(从任何//到行尾)并将其传递给stdout。

string str;
istream strippingCin = cin >> stripcomments;

while(strippingCin.good())
{
    strippingCin >> str;
    cout << str;
}

可能还有一个大文件输入而不是cin,所以我不想一次将全流数据加载到内存中。

是否可以不编写自己的流类?

也许我应该选择另一条路线?

1 个答案:

答案 0 :(得分:3)

boost::iostreams::filtering_stream非常适合这一点。在编写过滤类之后(请参阅类似示例here),您只需执行以下操作:

boost::iostreams::filtering_istream strippingCin;
strippingCin.push(StripCommentsFilter());
strippingCin.push(std::cin);

并且istream对象strippingCin已准备就绪。