std::experimental::shared_future<T>:: then
|
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
|
Cette section est incomplète
Raison : aucun exemple |