68
68
69
69
</ head >
70
70
< body >
71
- < header data-kunai-mdinfo ="{"meta": {"header": ["execution"], "id-type": ["cpo"], "namespace": ["std::execution"], "cpp": ["cpp26"]}, "sources": [{"id": "e8174adbd8740fa9c81837d660db40de99d139a8", "source": "#include <print>\n#include <execution>\nnamespace ex = std::execution;\n\nint main()\n{\n // \u5024(123,'X')\u306e\u9001\u4fe1\u7d50\u679c\u306f tuple<int,char> \u578b\u3067\u53d7\u3051\u53d6\u308b\n ex::sender auto snd1 = ex::just(123, 'X');\n std::tuple<int, char> result1 = std::this_thread::sync_wait(snd1).value();\n std::println(\"result1={}\", result1);\n\n // \u7a7a\u5024\u306e\u9001\u4fe1\u7d50\u679c\u306f tuple<> \u578b\u3067\u53d7\u3051\u53d6\u308b\n ex::sender auto snd2 = ex::just();\n std::tuple<> result2 = std::this_thread::sync_wait(snd2).value();\n std::println(\"result2={}\", result2);\n}\n"}], "page_id": ["reference", "execution", "execution", "just"]} ">
71
+ < header data-kunai-mdinfo ="{"meta": {"header": ["execution"], "id-type": ["cpo"], "namespace": ["std::execution"], "cpp": ["cpp26"]}, "sources": [{"id": "8631ce3245fa7c970d9236153a17d41822e16737", "source": "#include <string>\n#include <print>\n#include <execution>\nnamespace ex = std::execution;\nusing namespace std::string_literals;\n\nint main()\n{\n // \u7a7a\u306e\u5024\u3092\u9001\u4fe1\u3059\u308bSender\n ex::sender auto snd0 = ex::just();\n std::tuple<> result0 = std::this_thread::sync_wait(snd0).value();\n std::println(\"result0={}\", result0);\n\n // \u5024\"C++\"\u3092\u9001\u4fe1\u3059\u308bSender\n ex::sender auto snd1 = ex::just(\"C++\"s);\n std::tuple<std::string> result1 = std::this_thread::sync_wait(snd1).value();\n std::println(\"result1={}\", result1);\n\n // \u5024(123,'X')\u3092\u9001\u4fe1\u3059\u308bSender\n ex::sender auto snd2 = ex::just(123, 'X');\n std::tuple<int, char> result2 = std::this_thread::sync_wait(snd2).value();\n std::println(\"result2={}\", result2);\n}\n"}], "page_id": ["reference", "execution", "execution", "just"]} ">
72
72
< nav class ="navbar navbar-default " role ="navigation ">
73
73
< div class ="container-fluid ">
74
74
< div class ="navbar-header ">
200
200
201
201
< p class ="text-right "> < small >
202
202
最終更新日時(UTC):
203
- < span itemprop ="datePublished " content ="2025-05-10T10:06:59 ">
204
- 2025年05月10日 10時06分59秒
203
+ < span itemprop ="datePublished " content ="2025-05-29T06:55:34 ">
204
+ 2025年05月29日 06時55分34秒
205
205
</ span >
206
206
< br />
207
207
< span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
234
234
< h2 > 概要</ h2 >
235
235
< p > < code > just</ code > は、非< a class ="cpprefjp-defined-word " data-desc ="マルチスレッド実行時にリソースの所有権に基づいて実行順序を制御する操作 "> 同期操作</ a > の< a href ="start.html "> 開始(start)</ a > で< a href ="set_value.html "> 値完了関数</ a > を呼び出すSenderファクトリである。</ p >
236
236
< h2 > 効果</ h2 >
237
+ < p > 説明用のパック< code > ts</ code > に対して、パック< code > Ts</ code > を< code > decltype((ts))</ code > とする。下記いずれかの条件をみたすとき、呼び出し式< code > just(ts...)</ code > は< a class ="cpprefjp-defined-word " data-desc ="プログラムが適格でないこと。コンパイルエラーなどになる " href ="../../../implementation-compliance.html#dfn-ill-formed "> 不適格</ a > となる。</ p >
237
238
< ul >
238
- < li > 呼び出し式< code > just(ts...)</ code > は、< code > (< a href ="../movable-value.html "> movable-value</ a > <Ts> &&...) == false</ code > のとき< a class ="cpprefjp-defined-word " data-desc ="プログラムが適格でないこと。コンパイルエラーなどになる " href ="../../../implementation-compliance.html#dfn-ill-formed "> 不適格</ a > となる。</ li >
239
- < li > そうでなければ、式< code > < a href ="make-sender.html "> make-sender</ a > (just, < a href ="product-type.html "> product-type</ a > {ts...})</ code > と等価。</ li >
239
+ < li > < code > (< a href ="../movable-value.html "> movable-value</ a > <Ts> &&...) == false</ code > </ li >
240
240
</ ul >
241
+ < p > そうでなければ、呼び出し式< code > just(ts...)</ code > は下記と等価。</ p >
242
+ < 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 "> just</ span > < span class ="p "> ,</ span > < span class ="n "> < a href ="product-type.html "> product-type</ a > </ span > < span class ="p "> {</ span > < span class ="n "> ts</ span > < span class ="p "> ...})</ span >
243
+ </ code > </ pre > </ div >
244
+ </ p >
241
245
< h3 > Senderアルゴリズムタグ < code > just</ code > </ h3 >
242
246
< p > Senderアルゴリズム動作説明用のクラステンプレート< code > < a href ="impls-for.html "> impls-for</ a > </ code > に対して、下記の特殊化が定義される。</ p >
243
247
< p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="k "> namespace</ span > < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> execution</ span > < span class ="p "> {</ span >
@@ -252,28 +256,39 @@ <h3>Senderアルゴリズムタグ <code>just</code></h3>
252
256
< span class ="p "> }</ span >
253
257
</ code > </ pre > </ div >
254
258
</ p >
259
+ < h2 > カスタマイゼーションポイント</ h2 >
260
+ < p > < a href ="receiver.html "> Receiver</ a > との< a href ="connect.html "> 接続(connect)</ a > 時に、< a href ="get-domain-late.html "> 関連付けられた実行ドメイン</ a > に対して< code > < a href ="transform_sender.html "> execution::transform_sender</ a > </ code > 経由でSender変換が行われる。
261
+ < a href ="default_domain.html "> デフォルト実行ドメイン</ a > では無変換。</ p >
255
262
< h2 > 例</ h2 >
256
- < p > < div class ="yata " id ="e8174adbd8740fa9c81837d660db40de99d139a8 "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../../print.html "> <print></ a > </ span > < span class ="cp "> </ span >
263
+ < p > < div class ="yata " id ="8631ce3245fa7c970d9236153a17d41822e16737 "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../../string.html "> <string></ a > </ span > < span class ="cp "> </ span >
264
+ < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../../print.html "> <print></ a > </ span > < span class ="cp "> </ span >
257
265
< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../../execution.html "> <execution></ a > </ span > < span class ="cp "> </ span >
258
266
< span class ="k "> namespace</ span > < span class ="n "> ex</ span > < span class ="o "> =</ span > < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> execution</ span > < span class ="p "> ;</ span >
267
+ < span class ="k "> using</ span > < span class ="k "> namespace</ span > < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> string_literals</ span > < span class ="p "> ;</ span >
259
268
260
269
< span class ="kt "> int</ span > < span class ="nf "> main</ span > < span class ="p "> ()</ span >
261
270
< span class ="p "> {</ span >
262
- < span class ="c1 "> // 値(123,'X')の送信結果は tuple<int,char> 型で受け取る</ span >
263
- < span class ="n "> < a href ="sender.html "> ex::sender</ a > </ span > < span class ="k "> auto</ span > < span class ="n "> snd1</ span > < span class ="o "> =</ span > < span class ="n "> < span style ="color:#ff0000 "> ex::just</ span > </ span > < span class ="p "> (</ span > < span class ="mi "> 123</ span > < span class ="p "> ,</ span > < span class ="sc "> 'X'</ span > < span class ="p "> );</ span >
264
- < span class ="n "> < a href ="../../tuple/tuple.html "> std::tuple</ a > </ span > < span class ="o "> <</ span > < span class ="kt "> int</ span > < span class ="p "> ,</ span > < span class ="kt "> char</ span > < span class ="o "> ></ span > < span class ="n "> result1</ span > < span class ="o "> =</ span > < span class ="n "> < a href ="../this_thread/sync_wait.html "> std::this_thread::sync_wait</ a > </ span > < span class ="p "> (</ span > < span class ="n "> snd1</ span > < span class ="p "> ).</ span > < span class ="n "> < a href ="../../optional/optional/value.html "> value()</ a > </ span > < span class ="p "> ;</ span >
271
+ < span class ="c1 "> // 空の値を送信するSender</ span >
272
+ < span class ="n "> < a href ="sender.html "> ex::sender</ a > </ span > < span class ="k "> auto</ span > < span class ="n "> snd0</ span > < span class ="o "> =</ span > < span class ="n "> < span style ="color:#ff0000 "> ex::just</ span > </ span > < span class ="p "> ();</ span >
273
+ < span class ="n "> < a href ="../../tuple/tuple.html "> std::tuple</ a > </ span > < span class ="o "> <></ span > < span class ="n "> result0</ span > < span class ="o "> =</ span > < span class ="n "> < a href ="../this_thread/sync_wait.html "> std::this_thread::sync_wait</ a > </ span > < span class ="p "> (</ span > < span class ="n "> snd0</ span > < span class ="p "> ).</ span > < span class ="n "> < a href ="../../optional/optional/value.html "> value()</ a > </ span > < span class ="p "> ;</ span >
274
+ < span class ="n "> < a href ="../../print/println.html "> std::println</ a > </ span > < span class ="p "> (</ span > < span class ="s "> "result0={}"</ span > < span class ="p "> ,</ span > < span class ="n "> result0</ span > < span class ="p "> );</ span >
275
+
276
+ < span class ="c1 "> // 値"C++"を送信するSender</ span >
277
+ < span class ="n "> < a href ="sender.html "> ex::sender</ a > </ span > < span class ="k "> auto</ span > < span class ="n "> snd1</ span > < span class ="o "> =</ span > < span class ="n "> < span style ="color:#ff0000 "> ex::just</ span > </ span > < span class ="p "> (</ span > < span class ="s "> "C++"</ span > < span class ="n "> s</ span > < span class ="p "> );</ span >
278
+ < span class ="n "> < a href ="../../tuple/tuple.html "> std::tuple</ a > </ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../../string/basic_string.html "> std::string</ a > </ span > < span class ="o "> ></ span > < span class ="n "> result1</ span > < span class ="o "> =</ span > < span class ="n "> < a href ="../this_thread/sync_wait.html "> std::this_thread::sync_wait</ a > </ span > < span class ="p "> (</ span > < span class ="n "> snd1</ span > < span class ="p "> ).</ span > < span class ="n "> < a href ="../../optional/optional/value.html "> value()</ a > </ span > < span class ="p "> ;</ span >
265
279
< span class ="n "> < a href ="../../print/println.html "> std::println</ a > </ span > < span class ="p "> (</ span > < span class ="s "> "result1={}"</ span > < span class ="p "> ,</ span > < span class ="n "> result1</ span > < span class ="p "> );</ span >
266
280
267
- < span class ="c1 "> // 空値の送信結果は tuple<> 型で受け取る </ span >
268
- < span class ="n "> < a href ="sender.html "> ex::sender</ a > </ span > < span class ="k "> auto</ span > < span class ="n "> snd2</ span > < span class ="o "> =</ span > < span class ="n "> < span style ="color:#ff0000 "> ex::just</ span > </ span > < span class ="p "> ();</ span >
269
- < span class ="n "> < a href ="../../tuple/tuple.html "> std::tuple</ a > </ span > < span class ="o "> <></ span > < span class ="n "> result2</ span > < span class ="o "> =</ span > < span class ="n "> < a href ="../this_thread/sync_wait.html "> std::this_thread::sync_wait</ a > </ span > < span class ="p "> (</ span > < span class ="n "> snd2</ span > < span class ="p "> ).</ span > < span class ="n "> < a href ="../../optional/optional/value.html "> value()</ a > </ span > < span class ="p "> ;</ span >
281
+ < span class ="c1 "> // 値(123,'X')を送信するSender </ span >
282
+ < span class ="n "> < a href ="sender.html "> ex::sender</ a > </ span > < span class ="k "> auto</ span > < span class ="n "> snd2</ span > < span class ="o "> =</ span > < span class ="n "> < span style ="color:#ff0000 "> ex::just</ span > </ span > < span class ="p "> (</ span > < span class =" mi " > 123 </ span > < span class =" p " > , </ span > < span class =" sc " > 'X' </ span > < span class =" p " > );</ span >
283
+ < span class ="n "> < a href ="../../tuple/tuple.html "> std::tuple</ a > </ span > < span class ="o "> <</ span > < span class =" kt " > int </ span > < span class =" p " > , </ span > < span class =" kt " > char </ span > < span class =" o " > ></ span > < span class ="n "> result2</ span > < span class ="o "> =</ span > < span class ="n "> < a href ="../this_thread/sync_wait.html "> std::this_thread::sync_wait</ a > </ span > < span class ="p "> (</ span > < span class ="n "> snd2</ span > < span class ="p "> ).</ span > < span class ="n "> < a href ="../../optional/optional/value.html "> value()</ a > </ span > < span class ="p "> ;</ span >
270
284
< span class ="n "> < a href ="../../print/println.html "> std::println</ a > </ span > < span class ="p "> (</ span > < span class ="s "> "result2={}"</ span > < span class ="p "> ,</ span > < span class ="n "> result2</ span > < span class ="p "> );</ span >
271
285
< span class ="p "> }</ span >
272
286
</ code > </ pre > </ div >
273
287
</ div > </ p >
274
288
< h3 > 出力</ h3 >
275
- < p > < pre > < code > result1=(123, 'X')
276
- result2=()
289
+ < p > < pre > < code > result0=()
290
+ result1=("C++")
291
+ result2=(123, 'X')
277
292
</ code > </ pre > </ p >
278
293
< h2 > バージョン</ h2 >
279
294
< h3 > 言語</ h3 >
@@ -289,11 +304,12 @@ <h3>処理系</h3>
289
304
</ ul >
290
305
< h2 > 関連項目</ h2 >
291
306
< ul >
292
- < li > < code > < span href ="https://cpprefjp.github.io/reference/execution/execution/ just_error.md.nolink "> execution::just_error</ span > </ code > </ li >
293
- < li > < code > < span href ="https://cpprefjp.github.io/reference/execution/execution/ just_stopped.md.nolink "> execution::just_stopped</ span > </ code > </ li >
307
+ < li > < code > < a href ="just_error.html "> execution::just_error</ a > </ code > </ li >
308
+ < li > < code > < a href ="just_stopped.html "> execution::just_stopped</ a > </ code > </ li >
294
309
</ ul >
295
310
< h2 > 参照</ h2 >
296
311
< ul >
312
+ < li > < a href ="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2999r3.html " target ="_blank "> P2999R3 Sender Algorithm Customization</ a > </ li >
297
313
< li > < a href ="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2300r10.html " target ="_blank "> P2300R10 < code > std::execution</ code > </ a > </ li >
298
314
</ ul > </ div >
299
315
0 commit comments