[英]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);
然而,这几乎否定了流的使用,因为所有数据都保留在中间步骤的内存中,即使这两种操作都可以应用于具有恒定内存的流。
是否有一种(标准)技术可以用来组合这些操作,最好不要过多地改变a
和b
? 另外,如果可能的话,我想避免提升。
注意:此处的函数仅用于示例目的。 在实际程序中,两者都是两个对象的方法。
是否有一种(标准)技术可以用来组合这些操作,最好不要过多地改变 a 和 b ? 另外,如果可能的话,我想避免提升。
您真正想要的是某种生产者/消费者习惯用法,其中生产者从 IN 读取,而消费者写入 OUT。 据我所知,本机 C++ 没有任何帮助,尽管 Boost 支持协程,这(据我所知)基本上就是你最终会得到的。
这是一种实现程序的方法,可以让您对a
和b
进行最小的更改。 在这种情况下,我假设您正在阅读以行分隔的文本文件。 如果您正在读取二进制文件,则需要读取固定数量的字节,而不是一行。)
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.