std::experimental::shared_future<T>:: then
|
template
<
class
F
>
future < /* see below */ > then ( F && func ) const ; |
||
연속 함수 func 를 * this 에 연결합니다. * this 가 연결된 공유 상태를 가지고 있지 않은 경우(즉, valid ( ) == false 인 경우)의 동작은 정의되지 않습니다.
반환될
future
객체와 연관된 공유 상태를 생성하고,
fd
의 복사본을
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); } |
이 객체와 현재 연관된 공유 상태가 준비되면, 연속 실행 INVOKE ( std :: move ( fd ) , * this ) 가 지정되지 않은 실행 스레드에서 호출됩니다. 여기서 INVOKE 는 Callable 에 정의된 연산입니다. 해당 표현식이 유효하지 않을 경우 동작은 정의되지 않습니다.
연속(continuation)에서 반환된 모든 값은 반환된
future
객체의 공유 상태(shared state)에 결과로 저장됩니다. 연속 실행에서 전파된 모든 예외는 반환된
future
객체의 공유 상태에 예외적 결과(exceptional result)로 저장됩니다.
연속(continuation)의 반환 타입(즉,
U
)를
std::
result_of_t
<
std::
decay_t
<
F
>
(
const
std::
experimental
::
shared_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 ( ) 는 true 입니다.
매개변수
| func | - | 연결될 연속(continuation) |
반환값
이 객체에 의해 생성된 공유 상태와 연관된 std::experimental::future 객체. 반환된 객체에 대해 valid ( ) == true 입니다.
예제
|
이 섹션은 불완전합니다
이유: 예제가 없음 |