std::execution::read_env
Definido en el archivo de encabezado <execution> | ||
inlineconstexpr/*no especificado*/ read_env{}; | (desde C++26) (objeto punto de personalización) | |
Signatura de la llamada | ||
execution::senderauto 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ónconst de un tipo clase literalsemiregular
. Para fines de exposición, la versión no calificada constvolatile 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::senderauto 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