std::experimental::future<T>:: then
|
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 で定義された操作である。その式が無効な場合、動作は未定義となる。
継続から返される値は、返された
future
オブジェクトの共有状態に結果として格納されます。継続の実行から伝播された例外は、返された
future
オブジェクトの共有状態に例外的結果として格納されます。
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
>
となる。これは
暗黙的なアンラップ
として知られる。
暗黙的なアンラップが発生し、継続が無効な
future
を返した場合、共有状態は
std::future_error
型の例外で準備完了状態となり、エラー条件は
std::future_errc::broken_promise
となります。
この関数が戻った後、 valid ( ) は false になります。
パラメータ
| func | - | アタッチされる継続 |
戻り値
このオブジェクトによって作成された共有状態に関連付けられた std::experimental::future オブジェクト。 返されるオブジェクトに対して valid ( ) == true が成り立ちます。
例
|
このセクションは不完全です
理由: 例がありません |