1

我能够使用Boost Iterator Facade构建一个自定义的 Single Pass Iterator来迭代(以 C++ 方式)包含在 Windows 注册表项中的值,包装 C API RegEnumValue

例如:

// For each value 'v' under the given registry key 'hKey':
for (const auto& v : RegistryValueIterator(hKey)) 
{
    ...
}

基本上,迭代器的increment方法调用RegEnumValue增加dwIndex参数(最初在迭代器类构造函数中设置为0),当ERROR_NO_MORE_ITEMS返回时,即映射到“结束”迭代器。

我用过boost::single_pass_traversal_tag

class RegistryValueIterator
    : public boost::iterator_facade< RegistryValueIterator,
                                     RegistryValueEntry,
                                     boost::single_pass_traversal_tag >
{
    ...

Boost.Filesystemdirectory_iteratorAPI包装在 Windows 实现中,也被实现为单遍迭代器。同样, the也是一个输入迭代器不是前向迭代器)。FindNextFilestd::experimental::filesystem::directory_iterator

那么,注册表枚举是否有可能将迭代器类别升级为前向遍历迭代器?我应该遵循哪些步骤来实现该目标?

换句话说,是否有可能使用 Windows 注册表 API 来实现前向遍历迭代器所需的多遍RegEnumValue遍历?如果是这样,怎么做?


PS我已经讨论过注册表枚举/迭代,但是使用API枚举/迭代注册表的情况也非常相似。RegEnumKeyEx

4

0 回答 0