Namensräume
Varianten
Aktionen

std::execution::read_env

Von cppreference.com
< cpp‎ | execution
 
 
 
Definiert in Header <execution>
inline constexpr /*unspecified*/ read_env{};
(seit C++26)
(Customization-Point-Objekt)
Aufruf-Signatur
execution::sender auto read_env( auto&& query );
(seit C++26)

Eine Sender-Factory, die einen Sender zurückgibt, der in die Umgebung eines Empfängers greift und den aktuellen Wert abruft, der mit einem gegebenen Query-Objekt verbunden ist.

Für jedes Query-Objekt q ist der Ausdruck read_env(q) ausdrucksäquivalent zu /*make-sender*/(read_env, q).

Customization Point Objects

Der Name execution::read_env bezeichnet ein Customization Point Object, welches ein konstantes Funktionsobjekt eines literalen semiregular Klassentyps ist. Zu Expositionszwecken wird die cv-unqualifizierte Version seines Typs als __read_env_fn bezeichnet.

Alle Instanzen von __read_env_fn sind gleich. Die Effekte des Aufrufs unterschiedlicher Instanzen des Typs __read_env_fn auf dieselben Argumente sind äquivalent, unabhängig davon, ob der den Instanz bezeichnende Ausdruck ein lvalue oder rvalue ist und ob er const-qualifiziert ist oder nicht (eine volatile-qualifizierte Instanz muss jedoch nicht aufrufbar sein). Somit kann execution::read_env frei kopiert werden und seine Kopien können austauschbar verwendet werden.

Gegeben sei eine Menge von Typen Args.... Wenn std::declval<Args>()... die obigen Anforderungen für Argumente an execution::read_env erfüllt, dann modelliert __read_env_fn

Andernfalls nimmt kein Funktionsaufrufoperator von __read_env_fn an der Überladungsauflösung teil.

[edit] Beispiel

Ein Beispiel für die Verwendung dieser Factory ist die Planung abhängiger Arbeit auf dem Scheduler des Empfängers, der mit read_env(get_scheduler) erhalten werden kann.

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