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

来自cppreference.com
< cpp‎ | experimental‎ | future
template < class F >
future</* see below */> 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

[编辑] 示例