【发布时间】:2011-05-30 10:56:19
【问题描述】:
我对 Windows 很陌生。当我使用 WMI 时,我看到没有使用术语 iterator 而是使用枚举或枚举器来实现相同的目的。他们真的有迭代器吗?或者他们用 enum 或 enum、EnumVariant 等替换术语迭代器......或者我错过了一些关于迭代器和枚举器的东西。据我所知,传统上术语枚举与迭代器不同。我错了吗?
【问题讨论】:
标签: winapi enums iterator iteration
我对 Windows 很陌生。当我使用 WMI 时,我看到没有使用术语 iterator 而是使用枚举或枚举器来实现相同的目的。他们真的有迭代器吗?或者他们用 enum 或 enum、EnumVariant 等替换术语迭代器......或者我错过了一些关于迭代器和枚举器的东西。据我所知,传统上术语枚举与迭代器不同。我错了吗?
【问题讨论】:
标签: winapi enums iterator iteration
枚举既是事物(可能值的列表)又是动作(遍历列表中的每个项目)。 Windows API 使用这两个术语,依靠上下文来区分它们。
作为一般规则,名称中带有“Enum”的函数和接口名称表示枚举,例如EnumWindows 表示枚举窗口,IEnumUnknown(COM 接口)表示枚举未知[对象]。
Windows API 没有单一的枚举方法。 EnumWindows 在内部实现循环并通过处理函数重复调用您,而 IEnumUnknown 要求调用者使用 Next() 函数编写循环。
因此,在 Windows 上,枚举器是解决遍历元素列表问题的一大类解决方案。
迭代器是枚举器的 C++ 标准库概念。选择 'iterator' 而不是 'enumerator' 可能是故意的,以避免与现有的枚举语言概念混淆。
与 Windows 不同,C++ 标准库的迭代器概念定义得非常好:所有迭代器都像指针一样工作;所有迭代器都需要调用者编写循环等。C++ 标准库中有几类迭代器允许线性、反向或随机访问元素。
【讨论】:
术语枚举器通常用作迭代器的同义词。
枚举或枚举完全是另外一回事。
【讨论】: