命名空间
变体
操作

std::execution::read_env

来自 cppreference.cn
< cpp‎ | execution
 
 
执行控制库
执行概念
执行组件
执行上下文
执行域
前进保证
环境
查询
完成签名
发送器适配器闭包
协程工具
核心操作
操作状态
完成
变换
发送器算法
发送器工厂
read_env (读取环境)
发送器适配器
发送器消费者

 
定义于头文件 <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模型

否则,__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