std::coroutine_traits
来自cppreference.com
| 定义于头文件 <coroutine>
|
||
| template< class R, class... Args > struct coroutine_traits; |
(C++20 起) | |
从协程的返回类型与形参类型确定承诺类型。标准库实现提供与 R::promise_type 相同的公开可访问成员类型 promise_type ,若该有限定标识合法并代表类型。否则它无成员。
coroutine_traits 的程序定义特化应当定义公开可访问的成员类型 promise_type ,否则行为未定义。
模板形参
| R | - | 协程的返回类型 |
| Args | - | 协程的形参类型,若协程为非静态成员函数则包括隐式对象形参 |
成员类型
| 类型 | 定义 |
promise_type
|
R::promise_type ,若它合法,或由程序定义特化提供
|
可能的实现
template<class, class...> struct coroutine_traits {}; template<class R, class... Args> requires requires { typename R::promise_type } struct coroutine_traits<R, Args...> { using promise_type = R::promise_type; }; |
注解
若协程为非静态成员函数,则 Args... 中的首个类型为隐式对象形参的类型,而剩下的是函数的形参类型(若存在)。
若 std::coroutind_traits<R, Args...>::promise_type 不存在或不是类类型,则对应的协程定义为谬构。
用户可定义取决于程序定义类型的 coroutine_traits 显式或偏特化,以避免修改返回类型。
示例
| 本节未完成 原因:暂无示例 |