std::generator<Ref,V,Allocator>::iterator
class /*iterator*/; | (только для пояснения*) |
Тип возвращаемого значения generator::begin. Моделирует indirectly_readable и input_iterator.
Типы-члены
| Член | Определение |
|---|---|
value_type |
std::generator::value |
difference_type |
std::ptrdiff_t |
Члены-данные
| Член | Описание |
|---|---|
std::coroutine_handle<std::generator::promise_type> coroutine_ | дескриптор сопрограммы (объект-член только для пояснения*) |
Функции-члены
| создаёт итератор (открытая функция-член) |
|
| присваивает другой итератор (открытая функция-член) |
|
| возвращает базовое значение (открытая функция-член) |
|
| продвигает итератор (открытая функция-член) |
std::generator::iterator::iterator
/*iterator*/( /*iterator*/&& other ) noexcept; | (начиная с C++23) |
Инициализирует coroutine_ с помощью std::exchange(other.coroutine_, {});.
std::generator::iterator::operator=
/*iterator*/& operator=( /*iterator*/&& other ) noexcept; | (начиная с C++23) |
Эквивалентно coroutine_ = std::exchange(other.coroutine_, {});.
Возвращает: *this.
std::generator::iterator::operator*
reference operator*() const
noexcept( std::is_nothrow_copy_constructible_v<reference> );
| (начиная с C++23) |
- Пусть
referenceбудет базовым типомstd::generator. - Пусть для некоторого объекта generator
xегоcoroutine_находится в стеке*x.active_. - Пусть
x.active_->top()ссылается на приостановленную сопрограмму с объектом promisep.
Эквивалентно return static_cast<reference>(*p.value_);.
std::generator::iterator::operator++
constexpr /*iterator*/& operator++(); | (1) | (начиная с C++23) |
constexpr void operator++( int ); | (2) | (начиная с C++23) |
x.active_->top().resume().*this.++*this;. Функции, не являющиеся членами
|
(C++23) | сравнивает базовый итератор с sentinel (функция) |
operator==(std::generator::iterator)
friend bool operator==( const /*iterator*/& i, std::default_sentinel_t ); | (начиная с C++23) |
Эквивалентно return i.coroutine_.done();.
Оператор != синтезируется из operator==.
Эта функция не видна при обычном неквалифицированном поиске или квалифицированном поиске и может быть найдена только с помощью поиска, зависящего от аргументов, если std::generator::iterator является ассоциированным классом аргументов.
Пример
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/coroutine/generator/iterator