Namespaces
Variants

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

From cppreference.net

template < class F >
future < /* см. ниже */ > then ( F && func ) const ;

Присоедините продолжение func к * this . Поведение не определено, если * this не имеет связанного разделяемого состояния (т.е., valid ( ) == false ).

Создает общее состояние, связанное с возвращаемым объектом future , и копию fd из func , созданную как если бы с помощью DECAY_COPY ( std:: forward < F > ( func ) ) , вычисленное в потоке, вызывающем then , где DECAY_COPY определяется как

template<class T>
std::decay_t<T> DECAY_COPY(T&& v)
{
    return std::forward<T>(v);
}
**Примечание:** В данном случае весь код находится внутри тегов `
`, поэтому согласно инструкциям перевода не требуется. HTML-структура и C++ код полностью сохранены в оригинальном виде.

Когда текущее общее состояние, связанное с * this готово, продолжение INVOKE ( std :: move ( fd ) , * this ) вызывается в неопределенном потоке выполнения, где INVOKE - это операция, определенная в Callable . Если это выражение некорректно, поведение не определено.

Любое значение, возвращаемое из продолжения, сохраняется как результат в общем состоянии возвращаемого future объекта. Любое исключение, распространяемое из выполнения продолжения, сохраняется как исключительный результат в общем состоянии возвращаемого future объекта.

Пусть U будет типом возвращаемого значения продолжения (т.е. std:: result_of_t < std:: decay_t < F > ( const std:: experimental :: shared_future < T > & ) > ). Если U является std:: experimental :: future < T2 > для некоторого типа T2 , то возвращаемым типом then будет std:: experimental :: future < T2 > , в противном случае это std:: experimental :: future < U > . Это известно как неявная распаковка .

Если происходит неявное разворачивание и продолжение возвращает недопустимый future , тогда общее состояние переводится в готовность с исключением типа std::future_error с кодом ошибки std::future_errc::broken_promise .

После возврата из этой функции valid ( ) имеет значение true .

Параметры

func - продолжение для присоединения

Возвращаемое значение

Объект std::experimental::future , связанный с общим состоянием, созданным этим объектом. valid ( ) == true для возвращаемого объекта.

Пример