使用纤程简化枚举器4:过滤元素
关于枚举的一种高级玩法叫做”元素过滤”,什么意思呢?就是说一个枚举器获取另一个枚举器的输出并删除一些元素。
在基于生产者驱动的枚举器中,你可以通过替换一个新的回调函数来实现过滤,该回调函数代表客户端响应过滤元素的回调,并将未过滤的元素的回调转发给客户端。
在基于消费者驱动的枚举器中,你将通过将枚举器包装在另一个枚举器中来实现组合,该枚举器驱动内部枚举器并转发它希望调用者看到的元素。
基于纤程的枚举器的行为,更像是一种消费者驱动的枚举器,但状态管理更为容易。
让我们编写一个过滤器枚举器,它删除所有目录并禁止递归到它们,如下图所示:

为了从这个过滤的枚举器中生成元素,我们运行真正的枚举器 (m_e) 并删除所有目录,防止它们被传播到过滤器的消费者,并且只是对真正的枚举器响应“跳过它”这个动作。
你还可以使用我们过去几天一直使用的相同 TestWalk 函数来测试这个过滤后的枚举器。 你需要做的就是对main 函数做一些小改动,如下图所示:

请大家仔细观察一下,就会发现:程序不再递归到子目录。 它只是计算当前目录中文件的大小。
下一次我们将会关注的主题是:组合。
总结
枚举器上进行过滤这种玩法,我觉着吧,这事儿,越来越有意思了哈。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Using fibers to simplify enumerators, part 4: Filtering》
最近我写了个东西
正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。

- 下一篇: 编译器浏览器:现已支持代码执行和静态分析
- 上一篇: 使用纤程简化枚举器3:两方面都兼顾
相关推荐
- 使用 Visual Studio Code 调试 CMake 脚本
- Posted on 08月10日
- 第 43 期:Windows 11 24H2 的任务管理器使用新版 CPU 使用率计算公式
- Posted on 05月27日
- 为什么程序可以在被破坏的堆栈中”继续存活”?
- Posted on 10月18日
- 如何获取鼠标下的文本
- Posted on 02月14日



评论已关闭。