std::experimental::future<T>::then
| template< class F > future</* siehe unten */> then( F&& func ) ; |
||
Fügt die Fortsetzung func an *this an. Das Verhalten ist undefiniert, wenn *this keinen zugeordneten gemeinsamen Zustand hat (d. h. valid() == false).
Erzeugt einen gemeinsamen Zustand, der mit dem zurückzugebenden future-Objekt verbunden ist, und eine Kopie fd von func, die wie folgt konstruiert wird: DECAY_COPY(std::forward<F>(func)), ausgewertet im Thread, der then aufruft, wobei DECAY_COPY wie folgt definiert ist:
template<class T> std::decay_t<T> DECAY_COPY(T&& v) { return std::forward<T>(v); } |
Wenn der gemeinsame Zustand, der derzeit mit *this verbunden ist, bereit ist, wird die Fortsetzung INVOKE(std::move(fd), std::move(*this)) in einem nicht spezifizierten Ausführungsthread aufgerufen, wobei INVOKE die Operation ist, die in Callable definiert ist. Wenn dieser Ausdruck ungültig ist, ist das Verhalten undefiniert.
Jeder Wert, der von der Fortsetzung zurückgegeben wird, 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>)>). Wenn U std::experimental::future<T2> für einen bestimmten Typ T2 ist, dann ist der Rückgabetyp von then std::experimental::future<T2>, andernfalls ist es std::experimental::future<U>. Dies wird als implizites Entpacken bezeichnet.
Wenn implizites Entpacken stattfindet und die Fortsetzung ein ungültiges future zurückgibt, wird der gemeinsame Zustand mit einer Ausnahme vom Typ std::future_error mit dem Fehlerzustand std::future_errc::broken_promise bereit gemacht.
Nachdem diese Funktion zurückkehrt, ist valid() false.
[bearbeiten] Parameter
| func | - | eine anzufügende Fortsetzung |
[bearbeiten] Rückgabewert
Ein std::experimental::future-Objekt, das mit dem von diesem Objekt erzeugten gemeinsamen Zustand verbunden ist. valid() == true für das zurückgegebene Objekt.
[bearbeiten] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |