zl程序教程

您现在的位置是:首页 >  其它

当前栏目

使用纤程简化枚举器4:过滤元素

元素 过滤 枚举 简化 使用
2023-09-14 09:10:43 时间

关于枚举的一种高级玩法叫做”元素过滤”,什么意思呢?就是说一个枚举器获取另一个枚举器的输出并删除一些元素。

在基于生产者驱动的枚举器中,你可以通过替换一个新的回调函数来实现过滤,该回调函数代表客户端响应过滤元素的回调,并将未过滤的元素的回调转发给客户端。

在基于消费者驱动的枚举器中,你可以通过将枚举器包装在另一个枚举器中来实现组合,该枚举器驱动内部枚举器并转发它希望调用者看到的元素。

基于纤程的枚举器的行为,更像是一种消费者驱动的枚举器,但状态管理更为容易。

让我们编写一个过滤器枚举器,它删除所有目录并禁止递归到它们,如下图所示:

为了从这个过滤的枚举器中生成元素,我们运行真正的枚举器 (m_e) 并删除所有目录,防止它们被传播到过滤器的消费者,并且只是对真正的枚举器响应“跳过它”这个动作。

另外,还可以使用我们过去几天一直使用的相同 TestWalk 函数来测试这个过滤后的枚举器。 你需要做的就是对main 函数做一些小改动,如下图所示:

请大家仔细观察一下,就会发现:程序不再递归到子目录。 它只是计算当前目录中文件的大小。

下一次我们将会关注的主题是:组合。

总结

枚举器上进行过滤这种玩法,我觉着吧,这事儿,越来越有意思了哈。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Using fibers to simplify enumerators, part 4: Filtering》