我想实现一个 std :: stream 修饰符/解析器,即动态进行数据操作。
是否可以以流操纵器的形式创建它?例如,我想从stdin中删除所有行注释(从任何//
到行尾)并将其传递给stdout。
string str;
istream strippingCin = cin >> stripcomments;
while(strippingCin.good())
{
strippingCin >> str;
cout << str;
}
可能还有一个大文件输入而不是cin,所以我不想一次将全流数据加载到内存中。
是否可以不编写自己的流类?
也许我应该选择另一条路线?
答案 0 :(得分:3)
boost::iostreams::filtering_stream
非常适合这一点。在编写过滤类之后(请参阅类似示例here),您只需执行以下操作:
boost::iostreams::filtering_istream strippingCin;
strippingCin.push(StripCommentsFilter());
strippingCin.push(std::cin);
并且istream
对象strippingCin
已准备就绪。