Namensräume
Varianten
Aktionen

std::experimental::shared_future<T>::then

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

Hängt die Fortsetzung func an *this. Das Verhalten ist undefiniert, wenn *this keinen zugeordneten Shared State hat (d.h. valid() == false).

Erzeugt einen Shared State, der dem zurückzugebenden future-Objekt zugeordnet ist, und eine Kopie fd von func, die wie durch DECAY_COPY(std::forward<F>(func)) konstruiert wird, 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 aktuell *this zugeordnete Shared State bereit ist, wird die Fortsetzung INVOKE(std::move(fd), *this) auf 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 Wert, der von der Fortsetzung zurückgegeben wird, wird als Ergebnis im Shared State des zurückgegebenen future-Objekts gespeichert. Jede Ausnahme, die aus der Ausführung der Fortsetzung propagiert wird, wird als Ausnahmeergebnis im Shared State des zurückgegebenen future-Objekts gespeichert.

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

Wenn implizites Auspacken stattfindet und die Fortsetzung ein ungültiges future zurückgibt, wird der Shared State mit einer Ausnahme vom Typ std::future_error mit einer Fehlerbedingung von std::future_errc::broken_promise bereit gemacht.

Nachdem diese Funktion zurückgekehrt ist, ist valid() true.

[bearbeiten] Parameter

func - eine anzuhängende Fortsetzung

[bearbeiten] Rückgabewert

Ein std::experimental::future-Objekt, das dem von diesem Objekt erstellten Shared State zugeordnet ist. valid() == true für das zurückgegebene Objekt.

[bearbeiten] Beispiel