std::coroutine_traits

来自cppreference.com
< cpp‎ | coroutine
 
 
工具库
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)
(C++20)
swap 与类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
初等字符串转换
(C++17)
(C++17)
 
协程支持
协程特征
coroutine_traits
(C++20)
协程柄
无操作协程
平凡可等待体
 
在标头 <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 显式或偏特化,以避免修改返回类型。

示例