标准库标头 <coroutine> (C++20)

来自cppreference.com
< cpp‎ | header


 
 
标准库头
 

此头文件是语言支持库的一部分。

目录

包含

(C++20)
三路比较运算符支持[编辑]

用于发现协程承诺类型的特征类型
(类模板)[编辑]
用于指代暂停或执行中的协程
(类模板)[编辑]
std::coroutine_handle 的散列支持
(类模板特化)[编辑]
无操作协程
用于无可观察作用的协程
(类)[编辑]
std::coroutine_handle<std::noop_coroutine_promise>,有意用于指代无操作协程
(typedef)[编辑]
平凡可等待体
指示 await 表达式应该决不暂停
(类)[编辑]
指示 await 表达式应该始终暂停
(类)[编辑]

函数

比较两个 coroutine_handle 对象
(函数)[编辑]
无操作协程
创建等待或销毁无可观察作用的协程句柄
(函数)[编辑]

[编辑]概要

#include <compare>   namespace std {// 协程特征template<class R, class... ArgTypes>struct coroutine_traits;   // 协程句柄template<class Promise =void>struct coroutine_handle;   // 比较运算符constexprbool operator==(coroutine_handle<> x, coroutine_handle<> y)noexcept;constexpr strong_ordering operator<=>(coroutine_handle<> x, coroutine_handle<> y)noexcept;   // 散列支持template<class T>struct hash;template<class P>struct hash<coroutine_handle<P>>;   // 无操作协程struct noop_coroutine_promise;   template<>struct coroutine_handle<noop_coroutine_promise>;using noop_coroutine_handle = coroutine_handle<noop_coroutine_promise>;   noop_coroutine_handle noop_coroutine()noexcept;   // 平凡可等待体struct suspend_never;struct suspend_always;}

[编辑]类模板 std::coroutine_handle

namespace std {template<>struct coroutine_handle<void>{// 构造/重置constexpr coroutine_handle()noexcept;constexpr coroutine_handle(nullptr_t)noexcept; coroutine_handle& operator=(nullptr_t)noexcept;   // 导出/导入constexprvoid* address()constnoexcept;staticconstexpr coroutine_handle from_address(void* addr);   // 观察器constexprexplicit operator bool()constnoexcept;bool done()const;   // 恢复void operator()()const;void resume()const;void destroy()const;   private:void* ptr;// 仅用于阐释};   template<class Promise>struct coroutine_handle {// 构造/重置constexpr coroutine_handle()noexcept;constexpr coroutine_handle(nullptr_t)noexcept;static coroutine_handle from_promise(Promise&); coroutine_handle& operator=(nullptr_t)noexcept;   // 导出/导入constexprvoid* address()constnoexcept;staticconstexpr coroutine_handle from_address(void* addr);   // 转换constexpr operator coroutine_handle<>()constnoexcept;   // 观察器constexprexplicit operator bool()constnoexcept;bool done()const;   // 恢复void operator()()const;void resume()const;void destroy()const;   // 承诺访问 Promise& promise()const;   private:void* ptr;// 仅用于阐释};}

[编辑]std::noop_coroutine_promise

namespace std {struct noop_coroutine_promise {};}

[编辑]std::coroutine_handle<std::noop_coroutine_promise>

namespace std {template<>struct coroutine_handle<noop_coroutine_promise>{// 转换constexpr operator coroutine_handle<>()constnoexcept;   // 观察器constexprexplicit operator bool()constnoexcept;constexprbool done()constnoexcept;   // 恢复constexprvoid operator()()constnoexcept;constexprvoid resume()constnoexcept;constexprvoid destroy()constnoexcept;   // 承诺访问 noop_coroutine_promise& promise()constnoexcept;   // 地址constexprvoid* address()constnoexcept;private: coroutine_handle(/* unspecified */);void* ptr;// 仅用于阐释};}

[编辑]std::suspend_never

namespace std {struct suspend_never {constexprbool await_ready()constnoexcept{returntrue;}constexprvoid await_suspend(coroutine_handle<>)constnoexcept{}constexprvoid await_resume()constnoexcept{}};}

[编辑]std::suspend_always

namespace std {struct suspend_always {constexprbool await_ready()constnoexcept{returnfalse;}constexprvoid await_suspend(coroutine_handle<>)constnoexcept{}constexprvoid await_resume()constnoexcept{}};}
close