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

履歴 編集

concept
<execution>

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

namespace std::execution {
  template <class Sndr>
  concept sender;

  struct sender_t {};  // タグ型

  template<class Sndr>
  inline constexpr bool enable_sender = see below;
}

概要

senderは、型SndrがSender型の要件を満たすことを表すコンセプトである。

下記をみたすクラス型はSenderとみなせる。

  • 下記いずれかを満たす
    • sender_tをメンバ型Sndr::sender_conceptとして定義する
    • enable_sender変数テンプレートをtrueで特殊化する
    • コルーチンのAwaitable型
  • get_env属性を取得できる
  • ムーブ可能

要件

説明専用コンセプトis-sender, enable-senderを以下のように定義する。

template<class Sndr>
concept is-sender =
  derived_from<typename Sndr::sender_concept, sender_t>;

template<class Sndr>
concept enable-sender =
  is-sender<Sndr> ||
  is-awaitable<Sndr, env-promise<env<>>>;

enable_sender変数テンプレートを以下のように定義する。

template<class Sndr>
inline constexpr bool enable_sender = enable-sender<Sndr>;

senderコンセプトは、以下のように定義される。

template<class Sndr>
concept sender =
  enable_sender<remove_cvref_t<Sndr>> &&
  requires (const remove_cvref_t<Sndr>& sndr) {
    { get_env(sndr) } -> queryable;
  } &&
  move_constructible<remove_cvref_t<Sndr>> &&
  constructible_from<remove_cvref_t<Sndr>, Sndr>;

備考

プログラム定義型senderコンセプトを満たす場合、ユーザはenable_sender変数テンプレートをtrueとして特殊化してもよい。そのような特殊化は定数式で利用可能かつconst bool型をもつこと。

#include <execution>
namespace ex = std::execution;

int main()
{
  // 値42を送信するSender
  ex::sender auto sndr = ex::just(42);
}

出力

バージョン

言語

  • C++26

処理系

関連項目

参照