#winapi #enums #iterator #iteration
#winapi #перечисления #итератор #итерация
Вопрос:
Я очень новичок в Windows. Когда я работал с WMI, я увидел, что термин не использовался iterator
скорее, enum или enumurator использовались для той же цели. У них действительно есть итераторы? или они заменяют термин, iterator перечислением или enum, EnumVariant и т.д….. Или я чего-то не понимаю в iterator и enumurator. Насколько я знал, традиционно термин enum не совпадает с iterator . Я ошибаюсь?
Ответ №1:
Перечисление — это одновременно и вещь (список возможных значений), и действие (пошаговый просмотр каждого элемента в списке). Windows API использует оба термина, полагаясь на контекст для их различения.
Как правило, имена функций и интерфейсов с «Enum» в их названии означают перечислять, например, EnumWindows означает перечислять окна, а IEnumUnknown (COM-интерфейс) означает перечислять неизвестные [объекты].
Windows API не имеет единой методологии перечисления. EnumWindows реализует цикл внутри и повторно вызывает вас обратно через функцию-обработчик, в то время как IEnumUnknown требует, чтобы вызывающий объект написал цикл с использованием функции Next().
Итак, в Windows перечислитель представляет собой широкий класс решений проблемы перемещения по списку элементов.
Итераторы — это концепция перечислителя в стандартной библиотеке C . Выбор ‘iterator’ вместо ‘enumerator’, вероятно, был сделан намеренно, чтобы избежать путаницы с существующей концепцией языка enum.
В отличие от Windows, концепция итератора стандартной библиотеки C очень четко определена: все итераторы работают как указатели; все итераторы требуют, чтобы вызывающий объект написал цикл и т.д. В стандартной библиотеке C есть несколько классов итераторов, которые позволяют получать доступ к элементам линейно, в обратном порядке или случайным образом.
Ответ №2:
Термин перечислитель часто используется как синоним итератора.
Перечисление — это нечто совершенно иное.