std::generator<Ref,V,Allocator>::promise_type::yield_value
< cpp | coroutine | generator | promise type
std::suspend_always yield_value( yielded val ) noexcept;
|
(1) | (C++23 起) |
auto yield_value( const std::remove_reference_t<yielded>& lval )
requires std::is_rvalue_reference_v<yielded> && |
(2) | (C++23 起) |
template< class R2, class V2, class Alloc2, class Unused >
requires std::same_as<typename std::generator<T2, V2, Alloc2>::yielded, yielded> |
(3) | (C++23 起) |
template< ranges::input_range R, class Alloc >
requires std::convertible_to<ranges::range_reference_t<R>, yielded> |
(4) | (C++23 起) |
一种协程接口函数的实现,内部使用以支持 operator co_yield。
(yielded 是 std::generator 中定义的引用类型。)
2) 返回未指明类型的可等待对象,存储一个以 lval 直接非列表初始化的 std::remove_cvref_t<yielded> 类型的对象,其各成员函数被配置为使得
value_
指向所存储的对象。然后暂停协程。3) 令
x
为某个 generator 对象。
返回未指明类型的可等待对象,g.range 被移动如其中,
- 其成员 await_ready 返回 false,
- 其成员 await_suspend 将 g.range.coroutine_ 推入 *x.active_ 并
- 恢复 g.range.coroutine_ 所代表的协程的执行,并且
- 其成员 await_resume 求值
-
- std::rethrow_exception(except_) 若 bool(except_) 为 true。
- 若 bool(except_) 为 false,则 await_resume 成员没有效果。
g.range.coroutine_ 所代表的协程必须在其初始暂停点暂停。否则其行为未定义。
4) 等价于:
auto nested = [](std::allocator_arg_t, Alloc, ranges::iterator_t<R> i, ranges::sentinel_t<R> s) -> std::generator<yielded, ranges::range_value_t<R>, Alloc> { for (; i != s; ++i) co_yield static_cast<yielded>(*i); }; return yield_value(ranges::elements_of(nested( allocator_arg, r.allocator, ranges::begin(r.range), ranges::end(r.range))));
参数
val | - | yield-表达式 求值结果的值 |
lval | - | yield-表达式 求值结果的左值 |
g | - | 由生成器产生的元素范围 |
r | - | 元素范围 |
返回值
1) std::suspend_always 类型的可等待对象。
2-4) 如上所述的未指明类型的可等待对象。
异常
2,4) 可能抛出由所存储对象的初始化所抛出的任何异常。
示例
本节未完成 原因:暂无示例 |