命名空间
变体
操作

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

来自 cppreference.cn
< cpp‎ | experimental‎ | future
template< class F >
future</* 见下方 */> then( F&& func ) ;

将延续 func 附加到 *this。如果 *this 没有关联的共享状态(即, valid() == false),则行为未定义。

创建一个与要返回的 future 对象关联的共享状态,以及 func 的副本 fd,其构造方式如同在调用 then 的线程中评估的 DECAY_COPY(std::forward<F>(func)),其中 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>)>)。如果 Ustd::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

[编辑] 示例