LINUX.ORG.RU

История изменений

Исправление Siborgium, (текущая версия) :

Рейнжи и итераторы связаны довольно мало. Концепты тут вообще ни при чем (хотя можешь их применить для упрощения тестирования, воткнув несколько static_assert с requires { some_iterator_concept } в качестве условия).

Пример итератора можешь найти здесь, не забудь учесть замечания из комментов.

Сделать член-тип таг (random_access_iterator_tag, например),

Да. Нужно сделать необходимые тайпдефы, нужно реализовать необходимые операции, вставить тег. Это нужно будет для работы iterator_traits и прочих вещей.

а весь этот iterator_traits интерфейс не нужен будет?

iterator_traits – нужен удобного извлечения информации из произвольного итератора, и, особенно, единого способа работать как с итераторами, так и с указателями. В своей реализации итератора ты никак с ним не взаимодействуешь в общем случае, хотя (начиная с С++20) и можешь специализировать тег напрямую в iterator_traits.

Ну а чего они его легаси обзывают.

std::iterator_traits – никак не легаси. Возможно, вы путаете с std::iterator, который объявлен deprecated, так как количество бойлерплейта он уменьшает только для примитивных юзкейсов, при этом чреват труднонаходимыми ошибками.

Исправление Siborgium, :

Рейнжи и итераторы связаны довольно мало. Концепты тут вообще ни при чем (хотя можешь их применить для упрощения тестирования, воткнув несколько static_assert с requires { some_iterator_concept } в качестве условия).

Пример итератора можешь найти здесь, не забудь учесть замечания из комментов.

Сделать член-тип таг (random_access_iterator_tag, например),

Да. Нужно сделать необходимые тайпдефы, нужно реализовать необходимые операции, вставить тег. Это нужно будет для работы iterator_traits и прочих вещей.

а весь этот iterator_traits интерфейс не нужен будет?

iterator_traits – нужен удобного извлечения информации из произвольного итератора, и, особенно, единого способа работать как с итераторами, так и с указателями. В своей реализации итератора ты никак с ним не взаимодействуешь в общем случае, хотя (начиная с С++20) и можешь специализировать тег напрямую в iterator_traits.

Ну а чего они его легаси обзывают.

std::iterator_traits – никак не легаси. std::iterator объявлен deprecated, так как количество бойлерплейта он уменьшает только для примитивных юзкейсов, при этом чреват труднонаходимыми ошибками.

Исправление Siborgium, :

Рейнжи и итераторы связаны довольно мало. Концепты тут вообще ни при чем.

Пример итератора можешь найти здесь, не забудь учесть замечания из комментов.

Сделать член-тип таг (random_access_iterator_tag, например),

Да. Нужно сделать необходимые тайпдефы, нужно реализовать необходимые операции, вставить тег. Это нужно будет для работы iterator_traits и прочих вещей.

а весь этот iterator_traits интерфейс не нужен будет?

iterator_traits – нужен удобного извлечения информации из произвольного итератора, и, особенно, единого способа работать как с итераторами, так и с указателями. В своей реализации итератора ты никак с ним не взаимодействуешь в общем случае, хотя (начиная с С++20) и можешь специализировать тег напрямую в iterator_traits.

Ну а чего они его легаси обзывают.

std::iterator_traits – никак не легаси. std::iterator объявлен deprecated, так как количество бойлерплейта он уменьшает только для примитивных юзкейсов, при этом чреват труднонаходимыми ошибками.

Исходная версия Siborgium, :

Рейнжи и итераторы связаны довольно мало. Концепты тут вообще ни при чем.

Пример итератора можешь найти здесь, не забудь учесть замечания из комментов.

Сделать член-тип таг (random_access_iterator_tag, например),

Да. Нужно сделать необходимые тайпдефы, нужно реализовать необходимые операции, вставить тег. Это нужно будет для работы iterator_traits и прочих вещей.

а весь этот iterator_traits интерфейс не нужен будет?

iterator_traits – нужен удобного извлечения информации из произвольного итератора, и, особенно, единого способа работать как с итераторами, так и с указателями. Твой итератор никак с ним не взаимодействует в общем случае, хотя (начиная с С++20) и может специализировать тег напрямую в iterator_traits).

Ну а чего они его легаси обзывают.

std::iterator_traits – никак не легаси. std::iterator объявлен deprecated, так как количество бойлерплейта он уменьшает только для примитивных юзкейсов, при этом чреват труднонаходимыми ошибками.