标准库标头 <execution> (C++17)
来自cppreference.com
类 | ||
(C++17) | 测试类是否表示某种执行策略 (类模板) | |
在命名空间 std::execution 定义 | ||
(C++17)(C++17)(C++17)(C++20) | 执行策略类型 (类) | |
常量 | ||
在命名空间 std::execution 定义 | ||
(C++17)(C++17)(C++17)(C++20) | 全局执行策略对象 (常量) |
本节未完成 原因:links to execution library subpages |
[编辑]概要
namespace std {// 执行策略类型特征template<class T>struct is_execution_policy;// 独立template<class T>constexprbool is_execution_policy_v = is_execution_policy<T>::value;// 独立} namespace std::execution{// 顺序执行策略class sequenced_policy; // 并行执行策略class parallel_policy; // 并行及无序执行策略class parallel_unsequenced_policy; // 无序执行策略class unsequenced_policy; // 执行策略对象inlineconstexpr sequenced_policy seq{/* 未指定 */};inlineconstexpr parallel_policy par{/* 未指定 */};inlineconstexpr parallel_unsequenced_policy par_unseq{/* 未指定 */};inlineconstexpr unsequenced_policy unseq{/* 未指定 */};} namespace std {// 辅助概念template<class T> concept /*movable-value*/=/* 见描述 */;// 仅用于阐述 template<class From, class To> concept /*decays-to*/= same_as<decay_t<From>, To>;// 仅用于阐述 template<class T> concept /*class-type*/=/*decays-to*/<T, T>&& is_class_v<T>;// 仅用于阐述 // 可查询对象template<class T> concept /*queryable*/=/* 见描述 */;// 仅用于阐述 // 查询struct forwarding_query_t {/* 未指定 */};struct get_allocator_t {/* 未指定 */};struct get_stop_token_t {/* 未指定 */}; inlineconstexpr forwarding_query_t forwarding_query{};inlineconstexpr get_allocator_t get_allocator{};inlineconstexpr get_stop_token_t get_stop_token{}; template<class T>using stop_token_of_t = remove_cvref_t<decltype(get_stop_token(declval<T>()))>; template<class T> concept /*forwarding-query*/= forwarding_query(T{});// 仅用于阐述} namespace std::execution{// 查询struct get_domain_t {/* 未指定 */};struct get_scheduler_t {/* 未指定 */};struct get_delegation_scheduler_t {/* 未指定 */};struct get_forward_progress_guarantee_t {/* 未指定 */};template<class CPO>struct get_completion_scheduler_t {/* 未指定 */}; inlineconstexpr get_domain_t get_domain{};inlineconstexpr get_scheduler_t get_scheduler{};inlineconstexpr get_delegation_scheduler_t get_delegation_scheduler{};enumclass forward_progress_guarantee;inlineconstexpr get_forward_progress_guarantee_t get_forward_progress_guarantee{};template<class CPO>constexpr get_completion_scheduler_t<CPO> get_completion_scheduler{}; struct get_env_t {/* 未指定 */};inlineconstexpr get_env_t get_env{}; template<class T>using env_of_t = decltype(get_env(declval<T>())); template<class QueryTag, class ValueType>struct prop; template</*queryable*/... Envs>struct env; // 执行域struct default_domain; // 调度器struct scheduler_t {}; template<class Sch> concept scheduler =/* 见描述 */; // 接收器struct receiver_t {}; template<class Rcvr> concept receiver =/* 见描述 */; template<class Rcvr, class Completions> concept receiver_of =/* 见描述 */; struct set_value_t {/* 未指定 */};struct set_error_t {/* 未指定 */};struct set_stopped_t {/* 未指定 */}; inlineconstexpr set_value_t set_value{};inlineconstexpr set_error_t set_error{};inlineconstexpr set_stopped_t set_stopped{}; // 操作状态struct operation_state_t {}; template<class O> concept operation_state =/* 见描述 */; struct start_t;inlineconstexpr start_t start{}; // 发送器struct sender_t {}; template<class Sndr> concept sender =/* 见描述 */; template<class Sndr, class Env = env<>> concept sender_in =/* 见描述 */; template<class Sndr, class Rcvr> concept sender_to =/* 见描述 */; template<class... Ts>struct/*type-list*/;// 仅用于阐述 // 完成签名struct get_completion_signatures_t;inlineconstexpr get_completion_signatures_t get_completion_signatures{}; template<class Sndr, class Env = env<>> requires sender_in<Sndr, Env>using completion_signatures_of_t =/*call-result-t*/<get_completion_signatures_t, Sndr, Env>; template<class... Ts>using/*decayed-tuple*/= tuple<decay_t<Ts>...>;// 仅用于阐述 template<class... Ts>using/*variant-or-empty*/=/* 见描述 */;// 仅用于阐述 template<class Sndr, class Env = env<>, template<class...>class Tuple =/*decayed-tuple*/, template<class...>class Variant =/*variant-or-empty*/> requires sender_in<Sndr, Env>using value_types_of_t =/* 见描述 */; template<class Sndr, class Env = env<>, template<class...>class Variant =/*variant-or-empty*/> requires sender_in<Sndr, Env>using error_types_of_t =/* 见描述 */; template<class Sndr, class Env = env<>> requires sender_in<Sndr, Env>constexprbool sends_stopped =/* 见描述 */; template<class Sndr, class Env>using/*single-sender-value-type*/=/* 见描述 */;// 仅用于阐述 template<class Sndr, class Env> concept /*single-sender*/=/* 见描述 */;// 仅用于阐述 template<sender Sndr>using tag_of_t =/* 见描述 */; // 发送器变换template<class Domain, sender Sndr, /*queryable*/... Env> requires(sizeof...(Env)<=1)constexpr sender decltype(auto) transform_sender( Domain dom, Sndr&& sndr, const Env&... env)noexcept(/* 见描述 */); // 环境变换template<class Domain, sender Sndr, /*queryable*/ Env>constexpr/*queryable*/ decltype(auto) transform_env(Domain dom, Sndr&& sndr, Env&& env)noexcept; // 发送器算法的应用template<class Domain, class Tag, sender Sndr, class... Args>constexpr decltype(auto) apply_sender(Domain dom, Tag, Sndr&& sndr, Args&&... args)noexcept(/* 见描述 */); // connect 发送器算法struct connect_t;inlineconstexpr connect_t connect{}; template<class Sndr, class Rcvr>using connect_result_t = decltype(connect(declval<Sndr>(), declval<Rcvr>())); // 发送器工厂struct just_t {/* 未指定 */};struct just_error_t {/* 未指定 */};struct just_stopped_t {/* 未指定 */};struct schedule_t {/* 未指定 */}; inlineconstexpr just_t just{};inlineconstexpr just_error_t just_error{};inlineconstexpr just_stopped_t just_stopped{};inlineconstexpr schedule_t schedule{};inlineconstexpr/* 未指定 */ read_env{}; template<scheduler Sndr>using schedule_result_t = decltype(schedule(declval<Sndr>())); // 发送器适配器template</*class-type*/ D>struct sender_adaptor_closure {}; struct starts_on_t {/* 未指定 */};struct continues_on_t {/* 未指定 */};struct on_t {/* 未指定 */};struct schedule_from_t {/* 未指定 */};struct then_t {/* 未指定 */};struct upon_error_t {/* 未指定 */};struct upon_stopped_t {/* 未指定 */};struct let_value_t {/* 未指定 */};struct let_error_t {/* 未指定 */};struct let_stopped_t {/* 未指定 */};struct bulk_t {/* 未指定 */};struct split_t {/* 未指定 */};struct when_all_t {/* 未指定 */};struct when_all_with_variant_t {/* 未指定 */};struct into_variant_t {/* 未指定 */};struct stopped_as_optional_t {/* 未指定 */};struct stopped_as_error_t {/* 未指定 */}; inlineconstexpr starts_on_t starts_on{};inlineconstexpr continues_on_t continues_on{};inlineconstexpr on_t on{};inlineconstexpr schedule_from_t schedule_from{};inlineconstexpr then_t then{};inlineconstexpr upon_error_t upon_error{};inlineconstexpr upon_stopped_t upon_stopped{};inlineconstexpr let_value_t let_value{};inlineconstexpr let_error_t let_error{};inlineconstexpr let_stopped_t let_stopped{};inlineconstexpr bulk_t bulk{};inlineconstexpr split_t split{};inlineconstexpr when_all_t when_all{};inlineconstexpr when_all_with_variant_t when_all_with_variant{};inlineconstexpr into_variant_t into_variant{};inlineconstexpr stopped_as_optional_t stopped_as_optional{};inlineconstexpr stopped_as_error_t stopped_as_error{}; // 发送器与接收器工具 template<class Fn> concept /*completion-signature*/=/* 见描述 */;// 仅用于阐述 template</*completion-signature*/... Fns>struct completion_signatures {}; template<class Sigs> concept /*valid-completion-signatures*/=/* 见描述 */;// 仅用于阐述 template</*valid-completion-signatures*/ InputSignatures, /*valid-completion-signatures*/ AdditionalSignatures = completion_signatures<>, template<class...>class SetValue =/* 见描述 */, template<class>class SetError =/* 见描述 */, /*valid-completion-signatures*/ SetStopped = completion_signatures<set_stopped_t()>>using transform_completion_signatures = completion_signatures</* 见描述 */>; template<sender Sndr, class Env = env<>, /*valid-completion-signatures*/ AdditionalSignatures = completion_signatures<>, template<class...>class SetValue =/* 见描述 */, template<class>class SetError =/* 见描述 */, /*valid-completion-signatures*/ SetStopped = completion_signatures<set_stopped_t()>> requires sender_in<Sndr, Env>using transform_completion_signatures_of = transform_completion_signatures<completion_signatures_of_t<Sndr, Env>, AdditionalSignatures, SetValue, SetError, SetStopped>; // run_loopclass run_loop;} namespace std::this_thread{// 消耗器struct sync_wait_t {/* 未指定 */};struct sync_wait_with_variant_t {/* 未指定 */}; inlineconstexpr sync_wait_t sync_wait{};inlineconstexpr sync_wait_with_variant_t sync_wait_with_variant{};} namespace std::execution{struct as_awaitable_t {/* 未指定 */};inlineconstexpr as_awaitable_t as_awaitable{}; template</*class-type*/ Promise>struct with_awaitable_senders;}
[编辑]辅助概念
namespace std {template<class T> concept /*movable-value*/=// 仅用于阐述 move_constructible<decay_t<T>>&& constructible_from<decay_t<T>, T>&&(!is_array_v<remove_reference_t<T>>);} namespace std {template<class T> concept /*queryable*/= destructible<T>;// 仅用于阐述} namespace std::execution{template<class Sndr, class Env> concept /*single-sender*/= sender_in<Sndr, Env>&& requires {typename/*single-sender-value-type*/<Sndr, Env>;};}
[编辑]辅助类
namespace std::execution{struct/*empty-variant*/{// 仅用于阐述/*empty-variant*/()= delete;};}
[编辑]enum
std::forward_progress_guarantee
namespace std::execution{enumclass forward_progress_guarantee { concurrent, parallel, weakly_parallel };}
[编辑]概念 scheduler
namespace std::execution{template<class Sch> concept scheduler = derived_from<typename remove_cvref_t<Sch>::scheduler_concept, scheduler_t>&&/*queryable*/<Sch>&& requires(Sch&& sch){{ schedule(std::forward<Sch>(sch))}-> sender;{auto(get_completion_scheduler<set_value_t>( get_env(schedule(std::forward<Sch>(sch)))))}-> same_as<remove_cvref_t<Sch>>;}&& equality_comparable<remove_cvref_t<Sch>>&& copy_constructible<remove_cvref_t<Sch>>;}
[编辑]概念 receiver
namespace std::execution{template<class Rcvr> concept receiver = derived_from<typename remove_cvref_t<Rcvr>::receiver_concept, receiver_t>&& requires(const remove_cvref_t<Rcvr>& rcvr){{ get_env(rcvr)}->/*queryable*/;}&& move_constructible<remove_cvref_t<Rcvr>>&&// 右值是可移动的 constructible_from<remove_cvref_t<Rcvr>, Rcvr>;// 左值是可复制的 template<class Signature, class Rcvr> concept /*valid-completion-for*/= requires(Signature* sig){[]<class Tag, class... Args>(Tag(*)(Args...)) requires /*callable*/<Tag, remove_cvref_t<Rcvr>, Args...>{}(sig);}; template<class Rcvr, class Completions> concept /*has-completions*/= requires(Completions* completions){[]</*valid-completion-for*/<Rcvr>... Sigs>(completion_signatures<Sigs...>*){}(completions);}; template<class Rcvr, class Completions> concept receiver_of = receiver<Rcvr>&&/*has-completions*/<Rcvr, Completions>;}
[编辑]概念 operation_state
namespace std::execution{template<class O> concept operation_state = derived_from<typename O::operation_state_concept, operation_state_t>&& is_object_v<O>&& requires(O& o){{ start(o)}noexcept;};}