10

我想创建一个基于管道和过滤器的数据处理程序,它应该像这样操作传入的数据集,但不一定限于:

源管道(可能是来自数据库的数据集)<-sink-source-> 过滤器(添加一个附加字段)<-sink-source-> 过滤器(处理更多数据/删除,即使数据集无效)

我知道这种架构在 C/C++ 中的样子。但是考虑到 C++11 的功能方面带来的所有好处,我希望这项任务可以以一种优雅的方式完成,以便它能够:

  • 轻松扩展并在多线程环境中使用它(例如,通过将过滤器任务作为 lambda 函数执行,从而可能至少避免一些线程处理)
  • 在运行时轻松添加和删除过滤器
  • 懒惰地处理输入流
4

2 回答 2

7

即将发布的 C++14 标准中有一个涵盖该领域的草案:

C++ 管道 - ISO/IEC JTC1 SC22 WG21 N3534 = 2013-03-15

这是它的一个实现:

code.google.com/p/google-concurrency-library/source/browse/include/pipeline.h

于 2013-05-12T19:24:09.383 回答
3

您所描述的是某种流式架构管道架构。标准 C++ 没有这种特定的东西,但它为作为库作者的您提供了语言和标准库中必要的原语,以便构建这样的架构。只需按照通常的面向对象编程创建类和接口,然后根据您的需要将它们实例化并在管道中连接它们。

例如,您可能有一个Source接口和一个Sink接口 - 以及一个实现了 and 的Filter抽象类,以及一个实现了Sourceand的类,并且只是直接传递数据。这只是命名和组织这样一个框架的众多方法之一。SinkPipeSourceSink

于 2013-05-12T07:11:06.563 回答