最終更新日時(UTC):
が更新

履歴 編集

class template
<execution>

std::execution::basic-sender(C++26)

namespace std::execution {
  template<class Tag, class Data, class... Child>
  struct basic-sender : product-type<Tag, Data, Child...> {  // exposition only
    using sender_concept = sender_t;
    using indices-for = index_sequence_for<Child...>;        // exposition only

    decltype(auto) get_env() const noexcept {
      auto& [_, data, ...child] = *this;
      return impls-for<Tag>::get-attrs(data, child...);
    }

    template<decays-to<basic-sender> Self, receiver Rcvr>
    auto connect(this Self&& self, Rcvr rcvr) noexcept(see below)
      -> basic-operation<Self, Rcvr> {
      return {std::forward<Self>(self), std::move(rcvr)};
    }

    template<decays-to<basic-sender> Self, class... Env>
    static constexpr auto get_completion_signatures();
  };
}

概要

basic-senderは、Senderアルゴリズム動作仕様定義で用いられる説明専用のクラステンプレートである。

basic-sender<Tag, Data, Child...>senderのモデルであり、Senderアルゴリズム構築の結果型として利用される。

  • Tag : Senderアルゴリズムタグ(例:just, then
  • Data : Senderアルゴリズムに指定された追加の引数。複数個の引数はproduct-type型を用いて単一値として保持する。
  • Child : 子Senderのリスト。Senderファクトリでは0個、Senderアダプタでは通常1個の子Senderを保持する。

クラス仕様

basic-senderの特殊化が集成体となるか否かは未規定である。 basic-sender型の式は構造化束縛における初期化子として利用できる。

basic-sender::connectメンバ関数noexcept節の式は下記の通り。

get_completion_signaturesメンバ関数

template<class Tag, class Data, class... Child>
template<class Sndr, class... Env>
constexpr auto basic-sender<Tag, Data, Child...>::get_completion_signatures();

EをリストEnv..., env<>における先頭の型としたとき、環境EをもつReceiver型をRcvrとする。式CHECK-TYPE()impls-for<Tag>::template check-types<Sndr, E>()とし、型CSを下記の通り定義する。

  • CHECK-TYPE()がコア定数式のとき、opconnect_result_t<Sndr, Rcvr>型の左辺値とする。CScompletion_signaturesの特殊化となり、そのテンプレート引数の集合は評価op.start()の結果結果として得られる完了操作の集合に対応する。
  • そうでなければ、CScompletion_signatures<>となる。

テンプレートパラメータ制約 : 式CHECK-TYPES()適格であること。

効果:下記と等価。

CHECK-TYPES();
return CS();

説明専用エンティティ

説明専用のエイリアステンプレートindices-forを下記の通り定義する。

template<class Sndr>
using indices-for = remove_reference_t<Sndr>::indices-for;  // exposition only 

バージョン

言語

  • C++26

関連項目

参照