Методы iterator_from

Antervis
Antervis

Идея: добавить способ получения итераторов из ссылок/указателей на элементы контейнера, вида

template <container T>
T::iterator iterator_from(T::value_type& val);

template <container T>
T::const_iterator iterator_from(const T::value_type& val);

template <associative_container T>
T::iterator iterator_from_key(const T::key_type& val);

template <associative_container T>
T::iterator iterator_from_mapped(T::mapped_type& val);

template <associative_container T>
T::const_iterator iterator_from_key(const T::mapped_type& val);

Стдлибы/компиляторы знают типы нод своих контейнеров и могут гарантировать корректность такого преобразования, поэтому фича реализуема как минимум для стандартных контейнеров. В случае некорректной ссылки или элемента, не лежащего в соответствующем контейнере, разумеется, UB.

Такие методы позволили бы некоторые сценарии работы с обычными контейнерами, которые ранее были доступны только интрузивным.

6
рейтинг
Нет комментариев
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения