Namespaces
Variants

std::experimental::future<T>:: then

From cppreference.net

template < class F >
future < /* siehe unten */ > then ( F && func ) ;

Hängen Sie die Fortsetzung func an * this . Das Verhalten ist undefiniert, wenn * this keinen assoziierten gemeinsamen Zustand besitzt (d.h., valid ( ) == false ).

Erzeugt einen gemeinsam genutzten Zustand, der mit dem zurückzugebenden future -Objekt assoziiert ist, und eine Kopie fd von func , konstruiert wie durch DECAY_COPY ( std:: forward < F > ( func ) ) ausgewertet im Thread, der then aufruft, wobei DECAY_COPY definiert ist als

template<class T>
std::decay_t<T> DECAY_COPY(T&& v)
{
    return std::forward<T>(v);
}

Wenn der gemeinsam genutzte Zustand, der derzeit mit * this assoziiert ist, bereit ist, wird die Fortsetzung INVOKE ( std :: move ( fd ) , std :: move ( * this ) ) in einem nicht spezifizierten Ausführungsthread aufgerufen, wobei INVOKE die in Callable definierte Operation ist. Wenn dieser Ausdruck ungültig ist, ist das Verhalten undefiniert.

Jeder von der Fortsetzung zurückgegebene Wert wird als Ergebnis im gemeinsamen Zustand des zurückgegebenen future -Objekts gespeichert. Jede Ausnahme, die von der Ausführung der Fortsetzung propagiert wird, wird als außergewöhnliches Ergebnis im gemeinsamen Zustand des zurückgegebenen future -Objekts gespeichert.

Sei U der Rückgabetyp der Fortsetzung (d.h. std:: result_of_t < std:: decay_t < F > ( std:: experimental :: future < T > ) > ). Falls U std:: experimental :: future < T2 > für einen Typ T2 ist, dann ist der Rückgabetyp von then std:: experimental :: future < T2 > , andernfalls ist es std:: experimental :: future < U > . Dies ist bekannt als implizites Entpacken .

Wenn implizites Entpacken stattfindet und die Fortsetzung einen ungültigen future zurückgibt, wird der gemeinsame Zustand mit einer Ausnahme vom Typ std::future_error bereitgestellt, mit einer Fehlerbedingung von std::future_errc::broken_promise .

Nachdem diese Funktion zurückkehrt, valid ( ) ist false .

Parameter

func - eine anzuhängende Fortsetzung

Rückgabewert

Ein std::experimental::future Objekt, das mit dem durch dieses Objekt erzeugten gemeinsamen Zustand verknüpft ist. valid ( ) == true für das zurückgegebene Objekt.

Beispiel