std::experimental::future<T>:: then
|
template
<
class
F
>
future < /* ver abajo */ > then ( F && func ) ; |
||
Adjunte la continuación func a * this . El comportamiento es indefinido si * this no tiene un estado compartido asociado (es decir, valid ( ) == false ).
Crea un estado compartido asociado con el objeto
future
a ser devuelto, y una copia
fd
de
func
construida como si fuera mediante
DECAY_COPY
(
std::
forward
<
F
>
(
func
)
)
evaluado en el hilo que llama a
then
, donde
DECAY_COPY
se define como
template<class T> std::decay_t<T> DECAY_COPY(T&& v) { return std::forward<T>(v); } |
Cuando el estado compartido actualmente asociado con * this está listo, la continuación INVOKE ( std :: move ( fd ) , std :: move ( * this ) ) es llamada en un hilo de ejecución no especificado, donde INVOKE es la operación definida en Callable . Si esa expresión es inválida, el comportamiento es indefinido.
Cualquier valor devuelto desde la continuación se almacena como resultado en el estado compartido del objeto
future
devuelto. Cualquier excepción propagada desde la ejecución de la continuación se almacena como resultado excepcional en el estado compartido del objeto
future
devuelto.
Sea
U
el tipo de retorno de la continuación (es decir,
std::
result_of_t
<
std::
decay_t
<
F
>
(
std::
experimental
::
future
<
T
>
)
>
). Si
U
es
std::
experimental
::
future
<
T2
>
para algún tipo
T2
, entonces el tipo de retorno de
then
es
std::
experimental
::
future
<
T2
>
, de lo contrario es
std::
experimental
::
future
<
U
>
. Esto se conoce como
desencapsulación implícita
.
Si se produce un desembalaje implícito y la continuación devuelve un
future
inválido, entonces el estado compartido se prepara con una excepción de tipo
std::future_error
con una condición de error de
std::future_errc::broken_promise
.
Después de que esta función retorne, valid ( ) es false .
Parámetros
| func | - | una continuación que se adjuntará |
Valor de retorno
Un std::experimental::future objeto asociado con el estado compartido creado por este objeto. valid ( ) == true para el objeto devuelto.
Ejemplo
|
Esta sección está incompleta
Razón: sin ejemplo |