用于将对象流的转换链接在一起的 C++ 设计模式

标签 c++ design-patterns

我正在开发一个多线程库,它监视来自 winpcap 的网络流量并将数据包转换为几种不同类型的数据结构以供各种应用程序使用。

对于每种类型的输出,都需要进行多次转换,每个转换可以描述为获取 0-N 个类型 X 的对象,然后生成 0-N 个类型的 Y,这些 Y 将被下一步使用过程。

重要的是要注意在 X 到 Y 的转换中。如果我们目前只有 5 个(例如)X,这可能不足以创建 Y,或者可能足以创建许多 Y,具体取决于转换和收到的数据。

为了保持一致,我们显然希望为每个转换对象使用一个标准模式。我希望有人可以为类似这样的东西指出一个常用的模式,希望它依赖于 std(或 boost)库。

此外,我们一直在讨论使用继承链将不同层链接在一起的可能性。

IE.

class ProcessXtoY: ProcessWtoX
{
    void processData(iterator<X> begin, iterator<X> end)
    {
        /* create Y's, send output to  */
    }
    virtual void processData(iterator<Y> begin, iterator<Y> end) = 0;
}

class ProcessYtoZ: ProcessXtoY
{
    void processData(iterator<Y> begin, iterator<Y> end)
    {
        /* ... */
    }
}

任何人都可以为此类项目推荐一些常用模式的示例吗?

最佳答案

使用继承将转换链接在一起并不是应该使用继承的目的,而且在添加新转换时非常不灵活。如果您需要新的转换组合(例如 W 直接转换为 Y)。

相反,您是否考虑过创建描述每个转换算法的转换类,然后使用 std::transform 并将转换链接在一起?

关于用于将对象流的转换链接在一起的 C++ 设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8523369/

相关文章:

c++ - 如何处理 vector 以获得所需的输出?

c++ - 如何将键盘输入读取为字符串? (C++)

design-patterns - 在 Julia 模块中自动导出函数的语法

python - 对象集合的最佳设计模式

design-patterns - 抛出异常时尝试不同方法的模式

c++ - try-catch block 是否会降低性能

c++ - Win7下eclipse未启用SSE指令集

C++:类 "X"没有名为 "Y"的成员

c# - 我什么时候需要紧耦合和松耦合?

model-view-controller - 在 node.js 模块中异步初始化导出可以吗?