Namespaces
Variants

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

From cppreference.net

template < class F >
future < /* ver abajo */ > then ( F && func ) const ;

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 ) , * 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 > ( const std:: experimental :: shared_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 true .

Parámetros

func - una continuación que se adjuntará

Valor de retorno

Un objeto std::experimental::future asociado con el estado compartido creado por este objeto. valid ( ) == true para el objeto devuelto.

Ejemplo