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

来自cppreference.com
< cpp‎ | experimental‎ | future

template< class F >
future</* 见下文 */> then( F&& func ) ;

附着继续 func*this。若 *this 无关联共享状态(即 valid() == false)则行为未定义。

创建与要返回的 future 对象关联的共享状态,和如同用 DECAY_COPY(std::forward<F>(func)) 构造,在调用 then 的线程中求值的 func 的副本 fd,其中 DECAY_COPY 定义为

template<class T>
std::decay_t<T> DECAY_COPY(T&& v)
{
    return std::forward<T>(v);
}

当前与 *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 为对于某类型 T2std::experimental::future<T2>,则 then 的返回类型为 std::experimental::future<T2>,否则它为 std::experimental::future<U>。这被称为隐式解包装

若发生隐式解包装且继续返回非法的 future,则用以 std::future_errc::broken_promise 为错误条件的 std::future_error 类型异常令共享状态就绪。

此函数返回后,valid()false

参数

func - 要附着的继续。

返回值

与此对象所创建的共享状态关联的 std::experimental::future 对象。对于返回的对象 valid() == true

示例