标准库标头 <execution> (C++17)

来自cppreference.com
< cpp‎ | header


 
 
标准库头
 

此头文件是执行算法库的一部分。

目录

测试类是否表示某种执行策略
(类模板)[编辑]
在命名空间 std::execution 定义
执行策略类型
(类)[编辑]

常量

在命名空间 std::execution 定义
(C++17)(C++17)(C++17)(C++20)
全局执行策略对象
(常量)[编辑]

[编辑]概要

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;};}

[编辑]enumstd::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;};}
close