我想实现一个std::stream修饰符/解析器,即在飞行中进行数据操作。
是否可以以流操纵符的形式创建它?例如,我想从标准输入中删除所有行注释(从任何//
到行尾),并将其传递给标准输出。
string str;
istream strippingCin = cin >> stripcomments;
while(strippingCin.good())
{
strippingCin >> str;
cout << str;
}
也可能有一个大的文件输入而不是cin,所以我不想一次将完整的流数据加载到内存中。
不写自己的流类是可能的吗?
也许我应该走另一条路?
boost::iostreams::filtering_stream
是完美的。在编写了一个过滤类之后(参见这里的类似示例),您只需这样做:
boost::iostreams::filtering_istream strippingCin;
strippingCin.push(StripCommentsFilter());
strippingCin.push(std::cin);
和istream
对象strippingCin
准备使用