繁体   English   中英

如何在 C++ 中组合流操作?

[英]How to compose stream operations in C++?

对于某个程序,我有两个函数接受输入和输出流,对输入进行一些操作并写入输出。 我可以这样称呼他们:

a(cin, cout);
b(cin, cout);

假设我想按顺序运行它们,以便应用 a 和 b 的操作。 目前,我使用stringstream作为中间 iostream 来存储结果,如下所示:

stringstream buffer;
a(cin, buffer);
b(buffer, cout);

然而,这几乎否定了流的使用,因为所有数据都保留在中间步骤的内存中,即使这两种操作都可以应用于具有恒定内存的流。

是否有一种(标准)技术可以用来组合这些操作,最好不要过多地改变ab 另外,如果可能的话,我想避免提升。

注意:此处的函数仅用于示例目的。 在实际程序中,两者都是两个对象的方法。

是否有一种(标准)技术可以用来组合这些操作,最好不要过多地改变 a 和 b ? 另外,如果可能的话,我想避免提升。

您真正想要的是某种生产者/消费者习惯用法,其中生产者从 IN 读取,而消费者写入 OUT。 据我所知,本机 C++ 没有任何帮助,尽管 Boost 支持协程,这(据我所知)基本上就是你最终会得到的。

这是一种实现程序的方法,可以让您对ab进行最小的更改。 在这种情况下,我假设您正在阅读以行分隔的文本文件。 如果您正在读取二进制文件,则需要读取固定数量的字节,而不是一行。)

std::stringstream buffer;
std::string line;
while (std::getline(std::cin, line))
{
  std::istringstream iss(line);
  a(iss, buffer);
  b(buffer, std::cout);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM