Namespaces
Variants

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

From cppreference.net

template < class F >
future < /* voir ci-dessous */ > then ( F && func ) const ;

Attachez la continuation func à * this . Le comportement est indéfini si * this n'a pas d'état partagé associé (c'est-à-dire, valid ( ) == false ).

Crée un état partagé associé à l'objet future à retourner, et une copie fd de func construite comme par DECAY_COPY ( std:: forward < F > ( func ) ) évaluée dans le thread appelant then , où DECAY_COPY est défini comme

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

Lorsque l'état partagé actuellement associé à * this est prêt, la continuation INVOKE ( std :: move ( fd ) , * this ) est appelée sur un thread d'exécution non spécifié, où INVOKE est l'opération définie dans Callable . Si cette expression est invalide, le comportement est indéfini.

Toute valeur retournée par la continuation est stockée en tant que résultat dans l'état partagé de l'objet future retourné. Toute exception propagée depuis l'exécution de la continuation est stockée en tant que résultat exceptionnel dans l'état partagé de l'objet future retourné.

Soit U le type de retour de la continuation (c'est-à-dire std:: result_of_t < std:: decay_t < F > ( const std:: experimental :: shared_future < T > & ) > ). Si U est std:: experimental :: future < T2 > pour un certain type T2 , alors le type de retour de then est std:: experimental :: future < T2 > , sinon c'est std:: experimental :: future < U > . Ceci est connu sous le nom de déballage implicite .

Si un déballage implicite a lieu et que la continuation retourne un futur invalide, future , alors l'état partagé est rendu prêt avec une exception de type std::future_error avec une condition d'erreur de std::future_errc::broken_promise .

Après le retour de cette fonction, valid ( ) est true .

Paramètres

func - une continuation à attacher

Valeur de retour

Un objet std::experimental::future associé à l'état partagé créé par cet objet. valid ( ) == true pour l'objet retourné.

Exemple