标准库标头 <coroutine> (C++20)
来自cppreference.com
此头文件是语言支持库的一部分。
包含 | ||
(C++20) | 三路比较运算符支持 | |
类 | ||
(C++20) | 用于发现协程承诺类型的特征类型 (类模板) | |
(C++20) | 用于指代暂停或执行中的协程 (类模板) | |
std::coroutine_handle 的散列支持 (类模板特化) | ||
无操作协程 | ||
(C++20) | 用于无可观察作用的协程 (类) | |
(C++20) | std::coroutine_handle<std::noop_coroutine_promise>,有意用于指代无操作协程 (typedef) | |
平凡可等待体 | ||
(C++20) | 指示 await 表达式应该决不暂停 (类) | |
(C++20) | 指示 await 表达式应该始终暂停 (类) | |
函数 | ||
(C++20) | 比较两个 coroutine_handle 对象 (函数) | |
无操作协程 | ||
(C++20) | 创建等待或销毁无可观察作用的协程句柄 (函数) |
[编辑]概要
#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{}};}