头头体育官网-请贯注:我莫得试图让这个函数变得高效
你的位置:头头体育官网 > 头头体育官网 > 请贯注:我莫得试图让这个函数变得高效
请贯注:我莫得试图让这个函数变得高效
发布日期:2022-03-02 09:07    点击次数:118

请贯注:我莫得试图让这个函数变得高效

陈设对象的COM模子的遐想头头体育官网,头头体育APP,头头体育电子竞技,倾向于抵耗尽者(Consumer)友好。对于出产者(Producer)来说,陈设对象需要被遐想为一个气象机(State Machine),对于复杂的陈设器,举例树遍历或复合陈设,完结起来可能是尽头按捺易的。

另一方面,出产者的回调模子(被大大量 Win32 函数使用)偏向于对陈设对象友好。

这一次,耗尽者需要被构形成一个气象机,要是耗尽者对每个回调都做一些复杂的事情,这就需要更多的修复责任。(即使莫得,你也必须创建一个险阻文结构来将气象从调用者通过陈设器传递给回调函数。)

举例,假定咱们要编写一个遍历目次结构的例程,允许调用者指定在每个有遐想点要做什么。 让咱们领先使用回调模样来遐想它,代码如下图所示:

这里的遐想是调用者调用 EnumDirectoryTree 并提供一个回调函数,该函数被见告找到的每个文献,并不错决定陈设应该怎么进行。

将其遐想为回调不错使得 EnumDirectoryTree 的完结变得愈加浮浅。

请贯注:我莫得试图让这个函数变得高效,因为这不是我想抒发的主题。 它荒谬豪侈堆栈空间(在遍历一个大型目次树时可能会导致问题)。 这个函数也无法处理比 MAX_PATH 更深的旅途; 责罚这个问题超出了本系列的领域。 我也不惦记重剖释点,要是你不严慎处理它,就可能导致无尽轮回。

好吧,上图的代码并不难写。 但那是因为咱们让耗尽者的生涯变得粗重。 耗尽者需要在每个回调中羡慕气象。 举例,假定你想要构建目次列表偏激大小(包括和不包括子目次)。可能的代码如下图所示:

领先,上头的代码量还不小,更糟的是,才调的统共结构都被气象不断代码所隐敝。 照实很难一眼看出这段代码试图做什么。 相背,你必须盯着 EnumState的代码,并对正在发生的事情进行逆向工程。

头头体育官网,头头体育APP,头头体育电子竞技官网客服QQ:865083652

(是的,我不错通过使用内置的堆栈类稍稍简化这段代码,但正如我在智能指针的著述中所指出的那样,我尝试用纯C++来呈现这些著述,这么人们就不会争论哪个类库最佳。)

翌日,咱们将望望要是函数 EnumDirectoryTree 由调用者而不是陈设器指定,宇宙会何如!

转头

自己写码,从来都是一把梭。

无须陈设这些高等货,径直上int,更别提那些什么泛型,模板元什么的。

活做完毕到点放工,出Bug了泡面加今夜。

临了

Raymond Chen的《The Old New Thing》是我荒谬心爱的博客之一,内部有好多对于Windows的小常识,对于雄伟Windows平台修复者来说,照实十分有匡助。

本文来自:《Using fibers to simplify enumerators, part 1: When life is easier for the enumerator》

头头体育官网,头头体育APP,头头体育电子竞技