2828 < meta property ="og:url " content ="https://cpprefjp.github.io/reference/execution/execution/affine_on.html " />
2929 < meta property ="og:site_name " content ="cpprefjp - C++日本語リファレンス " />
3030 < meta property ="og:type " content ="article " />
31- < meta property ="og:description " content ="`affine_on`は、指定 [Scheduler](scheduler.md)上で完了させるSenderアダプタである。 " />
31+ < meta property ="og:description " content ="`affine_on`は、[Receiver](receiver.md)の [Scheduler](scheduler.md)上で完了させるSenderアダプタである。 " />
3232 < meta name ="twitter:card " content ="summary " />
3333 < meta name ="twitter:title " content ="std::execution::affine_on - cpprefjp C++日本語リファレンス " />
3434 < meta name ="twitter:url " content ="https://cpprefjp.github.io/reference/execution/execution/affine_on.html " />
35- < meta name ="twitter:description " content ="`affine_on`は、指定 [Scheduler](scheduler.md)上で完了させるSenderアダプタである。 " />
35+ < meta name ="twitter:description " content ="`affine_on`は、[Receiver](receiver.md)の [Scheduler](scheduler.md)上で完了させるSenderアダプタである。 " />
3636
3737
3838 < link rel ="alternate " type ="application/atom+xml " title ="Atom " href ="https://cpprefjp.github.io/rss.xml " />
200200
201201 < p class ="text-right "> < small >
202202 最終更新日時(UTC):
203- < span itemprop ="datePublished " content ="2026-05-16T15:17:02 ">
204- 2026年05月16日 15時17分02秒
203+ < span itemprop ="datePublished " content ="2026-06-06T16:24:43 ">
204+ 2026年06月06日 16時24分43秒
205205 </ span >
206206 < br />
207207 < span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
232232</ code > </ pre > </ div >
233233</ p >
234234< h2 > 概要</ h2 >
235- < p > < code > affine_on</ code > は、指定 < a href ="scheduler.html "> Scheduler</ a > 上で完了させるSenderアダプタである。
235+ < p > < code > affine_on</ code > は、< a href =" receiver.html " > Receiver </ a > の < a href ="scheduler.html "> Scheduler</ a > 上で完了させるSenderアダプタである。
236236アダプト対象Senderが正しいScheduler上で完了すると判断できるとき、アルゴリズムはスケジューリング操作を回避できる。</ p >
237237< p > < code > affine_on</ code > は< a href ="sender_adaptor_closure.html "> パイプ可能Senderアダプタオブジェクト</ a > であり、パイプライン記法をサポートする。</ p >
238238< h2 > 効果</ h2 >
239- < p > 説明用の式< code > sch</ code > と< code > sndr</ code > に対して、< code > decltype((sch))</ code > が< code > < a href ="scheduler.html "> scheduler</ a > </ code > を満たさない、もしくは< code > decltype((sndr))</ code > が< code > < a href ="sender.html "> sender</ a > </ code > を満たさないとき、呼び出し式< code > affine_on(sndr, sch)</ code > は< a class ="cpprefjp-defined-word " data-desc ="プログラムが適格でないこと。コンパイルエラーなどになる " href ="../../../implementation-compliance.html#dfn-ill-formed "> 不適格</ a > となる。</ p >
240- < p > そうでなければ、呼び出し式< code > affine_on(sndr, sch)</ code > は下記と等価。</ p >
241- < p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="n "> < a href ="make-sender.html "> make-sender</ a > </ span > < span class ="p "> (</ span > < span class ="n "> affine_on</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> sch</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> sndr</ span > < span class ="p "> )</ span >
239+ < p > 説明用の式< code > sndr</ code > に対して、< code > decltype((sndr))</ code > が< code > < a href ="sender.html "> sender</ a > </ code > を満たさないとき、呼び出し式< code > affine_on(sndr)</ code > は< a class ="cpprefjp-defined-word " data-desc ="プログラムが適格でないこと。コンパイルエラーなどになる " href ="../../../implementation-compliance.html#dfn-ill-formed "> 不適格</ a > となる。</ p >
240+ < p > そうでなければ、呼び出し式< code > affine_on(sndr)</ code > は下記と等価。</ p >
241+ < p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="n "> < a href ="make-sender.html "> make-sender</ a > </ span > < span class ="p "> (</ span > < span class ="n "> affine_on</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> < a href ="env.html "> env<></ a > </ span > < span class ="p "> (),</ span > < span class ="w "> </ span > < span class ="n "> sndr</ span > < span class ="p "> )</ span >
242+ </ code > </ pre > </ div >
243+ </ p >
244+ < h3 > Senderアルゴリズムタグ < code > affine_on</ code > </ h3 >
245+ < p > 型が< code > < a href ="scheduler.html "> scheduler</ a > </ code > のモデルである部分式< code > sch</ code > に対して、説明用の式< code > UNSTOPPABLE-SCHEDULER(sch)</ code > を、その型が< code > < a href ="scheduler.html "> scheduler</ a > </ code > のモデルである式< code > e</ code > とする。</ p >
246+ < ul >
247+ < li > 式< code > < a href ="schedule.html "> schedule</ a > (e)</ code > は< code > < a href ="unstoppable.html "> unstoppable</ a > (< a href ="schedule.html "> schedule</ a > (sch))</ code > と等価な式。</ li >
248+ < li > 任意の< a href ="../queryable.html "> クエリオブジェクト</ a > < code > q</ code > と部分式のパック< code > args...</ code > に対して、式< code > e.query(q, args...)</ code > は< code > sch.query(q, args...)</ code > と等価な式。</ li >
249+ < li > 式< code > e == UNSTOPPABLE-SCHEDULER(other)</ code > は< code > sch == other</ code > と等価な式。</ li >
250+ </ ul >
251+ < p > 説明用の式< code > sndr</ code > と< code > ev</ code > に対して、< code > < a href ="sender-for.html "> sender-for</ a > <decltype((sndr)), affine_on_t> == false</ code > のとき、式< code > affine_on.transform_sender(sndr, ev)</ code > は< a class ="cpprefjp-defined-word " data-desc ="プログラムが適格でないこと。コンパイルエラーなどになる " href ="../../../implementation-compliance.html#dfn-ill-formed "> 不適格</ a > となる。</ p >
252+ < p > そうでなければ、式< code > affine_on.transform_sender(sndr, ev)</ code > は下記と等価。</ p >
253+ < p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="k "> auto</ span > < span class ="o "> &</ span > < span class ="w "> </ span > < span class ="p "> [</ span > < span class ="n "> _</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> _</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> child</ span > < span class ="p "> ]</ span > < span class ="w "> </ span > < span class ="o "> =</ span > < span class ="w "> </ span > < span class ="n "> sndr</ span > < span class ="p "> ;</ span >
254+ < span class ="k "> if</ span > < span class ="w "> </ span > < span class ="k "> constexpr</ span > < span class ="w "> </ span > < span class ="p "> (</ span > < span class ="k "> requires</ span > < span class ="w "> </ span > < span class ="p "> {</ span > < span class ="w "> </ span > < span class ="n "> < a href ="../../utility/forward_like.html "> std::forward_like</ a > </ span > < span class ="o "> <</ span > < span class ="n "> Sndr</ span > < span class ="o "> ></ span > < span class ="p "> (</ span > < span class ="n "> child</ span > < span class ="p "> ).</ span > < span class ="n "> affine_on</ span > < span class ="p "> ();</ span > < span class ="w "> </ span > < span class ="p "> })</ span > < span class ="w "> </ span > < span class ="p "> {</ span >
255+ < span class ="w "> </ span > < span class ="k "> return</ span > < span class ="w "> </ span > < span class ="n "> < a href ="../../utility/forward_like.html "> std::forward_like</ a > </ span > < span class ="o "> <</ span > < span class ="n "> Sndr</ span > < span class ="o "> ></ span > < span class ="p "> (</ span > < span class ="n "> child</ span > < span class ="p "> ).</ span > < span class ="n "> affine_on</ span > < span class ="p "> ();</ span >
256+ < span class ="p "> }</ span > < span class ="w "> </ span > < span class ="k "> else</ span > < span class ="w "> </ span > < span class ="p "> {</ span >
257+ < span class ="w "> </ span > < span class ="k "> return</ span > < span class ="w "> </ span > < span class ="n "> < a href ="continues_on.html "> continues_on</ a > </ span > < span class ="p "> (</ span > < span class ="n "> < a href ="../../utility/forward_like.html "> std::forward_like</ a > </ span > < span class ="o "> <</ span > < span class ="n "> Sndr</ span > < span class ="o "> ></ span > < span class ="p "> (</ span > < span class ="n "> child</ span > < span class ="p "> ),</ span >
258+ < span class ="w "> </ span > < span class ="n "> UNSTOPPABLE</ span > < span class ="o "> -</ span > < span class ="n "> SCHEDULER</ span > < span class ="p "> (</ span > < span class ="n "> < a href ="get_start_scheduler.html "> get_start_scheduler</ a > </ span > < span class ="p "> (</ span > < span class ="n "> ev</ span > < span class ="p "> )));</ span >
259+ < span class ="p "> }</ span >
242260</ code > </ pre > </ div >
243261</ p >
244262< h2 > カスタマイゼーションポイント</ h2 >
245263< p > < a href ="receiver.html "> Receiver</ a > 接続時に、関連付けられた実行ドメインに対して< code > < a href ="transform_sender.html "> execution::transform_sender</ a > </ code > 経由でSender変換が行われる。
246264< a href ="default_domain.html "> デフォルト実行ドメイン</ a > では無変換。</ p >
247- < p > 説明用の式< code > out_sndr</ code > を< code > affine_on(sndr, sch)</ code > の< a class ="cpprefjp-defined-word " data-desc ="関数呼び出し式の評価結果となるオブジェクト・値 "> 戻り値</ a > < a href ="sender.html "> Sender</ a > とし、型< code > OutSndr</ code > を< code > decltype((out_sndr))</ code > とする。式< code > out_rcvr</ code > を< code > < a href ="sender_in.html "> sender_in</ a > <OutSndr, Env> == true</ code > となる< a href ="../queryable.html "> 環境</ a > < code > Env</ code > に関連付けられた< a href ="receiver.html "> Receiver</ a > とする。< code > out_sndr</ code > と< code > out_rcvr</ code > との< a href ="connect.html "> 接続(connect)</ a > 結果< a href ="operation_state.html "> Operation State</ a > への左辺値参照を< code > op</ code > としたとき、</ p >
265+ < p > 説明用の式< code > out_sndr</ code > を< code > affine_on(sndr)</ code > の< a class ="cpprefjp-defined-word " data-desc ="関数呼び出し式の評価結果となるオブジェクト・値 "> 戻り値</ a > < a href ="sender.html "> Sender</ a > とし、型< code > OutSndr</ code > を< code > decltype((out_sndr))</ code > とする。式< code > out_rcvr</ code > を< a href ="../queryable.html "> 環境</ a > < code > Env</ code > に関連付けられた< a href ="receiver.html "> Receiver</ a > とする。< code > < a href ="get_start_scheduler.html "> get_start_scheduler</ a > (< a href ="get_env.html "> get_env</ a > (out_rcvr))</ code > が< a class ="cpprefjp-defined-word " data-desc ="プログラムが適格でないこと。コンパイルエラーなどになる " href ="../../../implementation-compliance.html#dfn-ill-formed "> 不適格</ a > もしくは< code > < a href ="infallible-scheduler.html "> infallible-scheduler</ a > <Env></ code > を満たさないとき、式< code > < a href ="get_completion_signatures.html "> get_completion_signatures</ a > <OutSndr, Env>()</ code > の評価は< a class ="cpprefjp-defined-word " data-desc ="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態 "> 例外</ a > で終了する。< code > out_sndr</ code > と< code > out_rcvr</ code > との< a href ="connect.html "> 接続(connect)</ a > 結果< a href ="operation_state.html "> Operation State</ a > への左辺値参照を< code > op</ code > としたとき、</ p >
248266< ul >
249267< li > 呼び出し< code > < a href ="start.html "> start</ a > (op)</ code > は、現在の実行エージェント上で入力< a href ="sender.html "> Sender</ a > < code > sndr</ code > を開始し、< a href ="scheduler.html "> Scheduler</ a > < code > sch</ code > に関連付けられた実行リソースに属する実行エージェント上で< code > out_rcvr</ code > の完了操作が実行される。</ li >
250268< li > 現在の実行リソースが< code > sch</ code > に関連付けられた実行リソースと同一のとき、< code > < a href ="start.html "> start</ a > (op)</ code > の完了よりも前に< code > out_rcvr</ code > の完了操作が呼ばれる可能性がある。</ li >
251- < li > < code > sch</ code > 上でのスケジューリングが失敗した場合、< a class ="cpprefjp-defined-word " data-desc ="未規定の動作。事前の断りなく処理系によって異なる動作をする " href ="../../../implementation-compliance.html#dfn-unspecified-behavior "> 未規定</ a > の実行エージェント上で< code > out_rcvr</ code > の< a href ="set_error.html "> エラー完了</ a > が行われるべき。</ li >
252269</ ul >
253270< h2 > 備考</ h2 >
254- < p > < code > affine_on</ code > アルゴリズムの動作は< code > < a href ="continues_on.html "> continues_on</ a > </ code > と等価だが、処理系は不要なスケジューリング操作を省略(最適化)する可能性がある。</ p >
255271< p > < code > affine_on</ code > は< a href ="task.html "> タスクコルーチン</ a > のScheduler Affinity実現に用いられる。
256272詳細仕様は< code > < a href ="task/promise_type/await_transform.html "> task::promise::await_transform</ a > </ code > を参照のこと。</ p >
273+ < p > 開始された< a href ="scheduler.html "> Scheduler</ a > 上で再開(resume)されると分かっている< a href ="sender.html "> Sender</ a > に対して、処理系(標準ライブラリ実装)は< code > affine_on</ code > メンバ関数を提供すべきである。そのようなSenderの例として、< code > < a href ="just.html "> just</ a > </ code > , < code > < a href ="just_error.html "> just_error</ a > </ code > , < code > < a href ="just_stopped.html "> just_stopped</ a > </ code > , < code > < a href ="read_env.html "> read_env</ a > </ code > , < code > < a href ="write_env.html "> write_env</ a > </ code > 等がある。</ p >
257274< h2 > バージョン</ h2 >
258275< h3 > 言語</ h3 >
259276< ul >
@@ -274,6 +291,7 @@ <h2>参照</h2>
274291< ul >
275292< li > < a href ="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3552r3.html " target ="_blank "> P3552R3 Add a Coroutine Task Type</ a > </ li >
276293< li > < a href ="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p3826r5.html " target ="_blank "> P3826R5 Fix Sender Algorithm Customization</ a > </ li >
294+ < li > < a href ="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p3941r4.html " target ="_blank "> P3941R4 Scheduler Affinity</ a > </ li >
277295</ ul > </ div >
278296
279297 </ div >
0 commit comments