Electronic Joint Business

Solution for E-Business

将 Win32 枚举型 APIs 转换为 STL 迭代器

原文1 2 操作系统用于访问实体集合的 API 十分普遍,如 Unix 的 opendir()/readdir() 函数。Win32 API 也提供了函数来枚举集合内的元素,通常采用的模型无外乎下面几种:回调函数 (如 EnumChildWindows), get-first/get-next (取第一个/再取下一个 比如FindFirst/NextFile), 或 get-nth (按 n 访问 如 RegEnumValue) — 其语义和前二者完全不同。 当前 C++ 社区正在逐步朝着符合 STL 的通用编码格式迈进,如使用容器 (序列容器和关联容器)、迭代器、泛函数 (仿函数或函数对象)、算法和适配器等等。这种做法的好处是可以使用通用的方法操纵不同的实体, 大大减少开发者的工作量, 同时提高健壮性、可维护性且有利于重用。 STL 技术未能被广泛运用的原因之一是除了标准库提供的类和函数 (list, vector, for_each 等) 之外, 缺少可用的 STL 兼容库, 特别对于广泛使用的操作系统 API。因为这涉及到编程模型之间迁移转换的复杂性, 特别是对于集合和序列。本文将创建两个封装了 Win32 API 的轻量级序列类, 并提供了按 STL 标准算法来操纵枚举实体的迭代器,由此将两种 Win32 枚举模型实际转换成 […]

, , , ,

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.