Я был в состоянии использовать Boost Iterator Facade построить обычай Однопроходной итератор перебирать (способом 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.Filesystem-х directory_iterator
, который оборачивает FindNextFile
API в реализации Windows, реализован в виде один проход Итератор тоже. И аналогично std::experimental::filesystem::directory_iterator
является Итератор ввода также (не прямой итератор).
Таким образом, можно ли при перечислении реестра обновить категорию итератора до Итератор обхода вперед? Какие шаги я должен предпринять для достижения этой цели?
Другими словами, возможно ли реализовать многоходовых Обход, требуемый итераторами прямого обхода с использованием API-интерфейсов реестра Windows, таких как RegEnumValue
? Если так, то как?
Постскриптум Я обсуждал реестр значение перечисление / итерация, но вещи очень похожи для перечисления / итерации через реестр ключи а также, используя RegEnumKeyEx
API.
Задача ещё не решена.
Других решений пока нет …