std::execution::read_env
来自 cppreference.cn
定义于头文件 <execution> |
||
inline constexpr /*unspecified*/ read_env{}; |
(C++26 起) (定制点对象) |
|
调用签名 (Call signature) |
||
execution::sender auto read_env( auto&& query ); |
(C++26 起) | |
一个发送者工厂,它返回一个发送者,该发送者会深入接收器的环境并提取与给定查询对象关联的当前值。
对于任何查询对象q
,表达式read_env(q)与/*make-sender*/(read_env, q)是表达式等价的。
自定义点对象
名称execution::read_env
表示一个定制点对象,它是一个const函数对象,属于字面量半规则
类类型。为了便于说明,其类型的不带cv限定的版本记为__read_env_fn
。
所有__read_env_fn
的实例都是相等的。在相同参数上调用不同__read_env_fn
类型实例的效果是等价的,无论表示实例的表达式是左值还是右值,以及是否带有const限定(然而,带有volatile限定的实例不要求可调用)。因此,execution::read_env
可以自由复制,其副本可以互换使用。
给定一组类型Args...
,如果std::declval<Args>()...满足上述execution::read_env
参数的要求,则__read_env_fn
模型
- std::invocable<__read_env_fn, Args...>,
- std::invocable<const __read_env_fn, Args...>,
- std::invocable<__read_env_fn&, Args...>,以及
- std::invocable<const __read_env_fn&, Args...>.
否则,__read_env_fn
的任何函数调用运算符都不参与重载决议。
[编辑] 示例
此工厂的一个用法是,在接收器的调度器上调度依赖的工作,这可以通过read_env(get_scheduler)获得
std::execution::sender auto task = std::execution::read_env(std::execution::get_scheduler) | std::execution::let_value([](auto sched) { return std::execution::starts_on(sched, /*some nested work here*/); }); std::this_thread::sync_wait( std::move(task) ); // wait for it to finish