Namespaces
Variants

std::experimental::future<T>:: then

From cppreference.net

template < class F >
future < /* see below */ > then ( F && func ) ;
**Примечание:** В данном фрагменте HTML-кода отсутствует переводимый текст, требующий перевода на русский язык. Весь представленный контент состоит из: - HTML-тегов и атрибутов (не подлежат переводу) - C++ кода внутри тегов ` ` (не подлежит переводу согласно инструкциям) - Специфических C++ терминов (template, class, future, then, func и т.д.), которые не переводятся Если бы в документе присутствовал обычный текст вне тегов кода, он был бы переведен на русский язык с сохранением профессионального стиля.

Присоедините продолжение 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);
}
**Примечание:** Весь код C++ внутри тегов `
` был сохранен без изменений, как и требовалось. HTML-разметка и атрибуты также остались нетронутыми.

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

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

Пусть U будет типом возвращаемого значения продолжения (т.е. std:: result_of_t < std:: decay_t < F > ( std:: experimental :: 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 ( ) принимает значение false .

Параметры

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

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

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

Пример