std::execution::read_env
Definido en el archivo de encabezado <execution>
|
||
inline constexpr /*no especificado*/ read_env{}; |
(desde C++26) (objeto punto de personalización) |
|
Signatura de la llamada |
||
execution::sender auto read_env( auto&& query ); |
(desde C++26) | |
Una fábrica de emisores que devuelve un emisor que llega al entorno de un receptor y extrae el valor actual asociado con un determinado objeto de consulta.
Para cualquier objeto de consulta q
, la expresión read_env(q) es de expresión equivalente a /*crear-emisor*/(read_env, q).
Objetos punto de personalización
El nombre execution::read_env
denota un objeto punto de personalización, que es un objeto función const de un tipo clase literal semiregular
. Para fines de exposición, la versión no calificada const volatile de su tipo se denota como __read_env_fn
.
Todas los ejemplares de __read_env_fn
son iguales. Los efectos de invocar diferentes ejemplares del tipo __read_env_fn
sobre los mismos argumentos son equivalentes, independientemente de si la expresión que denota el ejemplar es un l-valor o un r-valor, y está calificada const o no (sin embargo, no se requiere que un ejemplar calificado volatile sea invocable). Por lo tanto, execution::read_env
se puede copiar libremente y sus copias se pueden usar indistintamente.
Dado un conjunto de tipos Args...
, si std::declval<Args>()... cumple con los requisitos para los argumentos a execution::read_env
arriba, __read_env_fn
modela
- std::invocable<__read_env_fn, Args...>,
- std::invocable<const __read_env_fn, Args...>,
- std::invocable<__read_env_fn&, Args...>, and
- std::invocable<const __read_env_fn&, Args...>.
De lo contrario, ningún operador de llamada a función de __read_env_fn
participa en la resolución de sobrecargas.
[editar] Ejemplo
Un ejemplo de uso de esta fábrica es planificar trabajo dependiente del planificador del receptor, que se puede obtener con 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, /*algo de trabajo anidado aquí*/); }); std::this_thread::sync_wait( std::move(task) ); // esperar a que termine