История изменений
Исправление 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, так как количество бойлерплейта он уменьшает только для примитивных юзкейсов, при этом чреват труднонаходимыми ошибками.