|
| 1 | +# transform_sender |
| 2 | +* execution[meta header] |
| 3 | +* function template[meta id-type] |
| 4 | +* std::execution[meta namespace] |
| 5 | +* cpp26[meta cpp] |
| 6 | + |
| 7 | +```cpp |
| 8 | +namespace std::execution { |
| 9 | + template<class Domain, sender Sndr, queryable... Env> |
| 10 | + requires (sizeof...(Env) <= 1) |
| 11 | + constexpr sender decltype(auto) transform_sender(Domain dom, Sndr&& sndr, const Env&... env) |
| 12 | + noexcept(see below); |
| 13 | +} |
| 14 | +``` |
| 15 | +* sender[link sender.md] |
| 16 | +* queryable[link ../queryable.md] |
| 17 | +* see below[italic] |
| 18 | +
|
| 19 | +## 概要 |
| 20 | +[実行ドメイン](default_domain.md)に応じて[Sender](sender.md)を変換する。 |
| 21 | +Senderオブジェクトの構築時、Senderと[Receiver](receiver.md)間[接続(connect)](../connect.md.nolink)のカスタマイゼーションポイントとして機能する。 |
| 22 | +
|
| 23 | +型変換ではSender型の変換が行われなくなる(恒等変換となる)まで、下記のカスタマイゼーションポイントを再帰的に呼び出す。 |
| 24 | +
|
| 25 | +- 定義されていれば、`dom.transform_sender`メンバ関数に変換動作を委譲する。 |
| 26 | +- そうでなければ、デフォルト実行ドメイン[`transform_sender`](default_domain/transform_sender.md)に変換動作を委譲する。 |
| 27 | +
|
| 28 | +
|
| 29 | +## 戻り値 |
| 30 | +説明用の式`transformed-sndr`を次の通りとする。 |
| 31 | +
|
| 32 | +- 適格ならば、式`dom.transform_sender(`[`std::forward`](/reference/utility/forward.md)`<Sndr>(sndr), env...)` |
| 33 | +- そうでなければ、[`default_domain()`](default_domain.md)`.`[`transform_sender`](default_domain/transform_sender.md)`(`[`std::forward`](/reference/utility/forward.md)`<Sndr>(sndr), env...)` |
| 34 | +
|
| 35 | +説明用の式`final-sndr`を次の通りとする。 |
| 36 | +
|
| 37 | +- `sndr`と`transformed-sndr`の型がCV修飾を無視して同一ならば、`transformed-sndr` |
| 38 | +- そうでなければ、式`transform_sender(dom, transformed-sndr, env...)`(再帰適用) |
| 39 | +
|
| 40 | +`final-sndr`を返す。 |
| 41 | +
|
| 42 | +
|
| 43 | +## 例外 |
| 44 | +`noexcept(final-sndr) == true`ならば、例外を投げない。 |
| 45 | +そうでなければ、Sender変換過程で送出される例外。 |
| 46 | +
|
| 47 | +
|
| 48 | +## バージョン |
| 49 | +### 言語 |
| 50 | +- C++26 |
| 51 | +
|
| 52 | +### 処理系 |
| 53 | +- [Clang](/implementation.md#clang): ?? |
| 54 | +- [GCC](/implementation.md#gcc): ?? |
| 55 | +- [ICC](/implementation.md#icc): ?? |
| 56 | +- [Visual C++](/implementation.md#visual_cpp): ?? |
| 57 | +
|
| 58 | +
|
| 59 | +## 関連項目 |
| 60 | +- [`default_domain::transform_sender`](default_domain/transform_sender.md) |
| 61 | +
|
| 62 | +
|
| 63 | +## 参照 |
| 64 | +- [P2999R3 Sender Algorithm Customization](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2999r3.html) |
| 65 | +- [P2300R10 `std::execution`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2300r10.html) |
0 commit comments