Namespaces
Variants

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

From cppreference.net

template < class F >
future < /* see below */ > then ( F && func ) ;

연속 함수 func * this 에 연결합니다. * this 가 연결된 공유 상태를 가지고 있지 않은 경우(즉, valid ( ) == false 인 경우)의 동작은 정의되지 않습니다.

반환될 future 객체와 연관된 공유 상태를 생성하고, then 을 호출하는 스레드에서 평가되는 DECAY_COPY ( std:: forward < F > ( func ) ) 로 생성된 func 의 복사본 fd 를 생성합니다. 여기서 DECAY_COPY 는 다음과 같이 정의됩니다.

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

이와 현재 연관된 공유 상태가 준비되었을 때, 연속 함수 INVOKE ( std :: move ( fd ) , std :: move ( * this ) ) 가 지정되지 않은 실행 스레드에서 호출되며, 여기서 INVOKE Callable 에 정의된 연산입니다. 해당 표현식이 유효하지 않을 경우 동작은 정의되지 않습니다.

연속(continuation)에서 반환된 모든 값은 반환된 future 객체의 공유 상태(shared state)에 결과로 저장됩니다. 연속 실행에서 전파된 모든 예외는 반환된 future 객체의 공유 상태에 예외적 결과(exceptional result)로 저장됩니다.

연속(continuation)의 반환 타입을 U 라고 하자(즉, std:: result_of_t < std:: decay_t < F > ( std:: experimental :: future < T > ) > ). 만약 U 가 어떤 타입 T2 에 대한 std:: experimental :: future < T2 > 라면, then 의 반환 타입은 std:: experimental :: future < T2 > 이고, 그렇지 않으면 std:: experimental :: future < U > 입니다. 이를 암묵적 언래핑(implicit unwrapping) 이라고 합니다.

암시적 언래핑이 발생하고 연속 작업이 유효하지 않은 future 를 반환하는 경우, 공유 상태는 std::future_error 타입의 예외와 함께 std::future_errc::broken_promise 오류 조건으로 준비 상태가 됩니다.

이 함수가 반환된 후, valid ( ) false 입니다.

매개변수

func - 연결될 연속 함수

반환값

이 객체에 의해 생성된 공유 상태와 연관된 std::experimental::future 객체. 반환된 객체에 대해 valid ( ) == true 입니다.

예제