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

履歴 編集

class template
<execution>

std::execution::impls-for(C++26)

namespace std::execution {
  template<class Tag>
  struct impls-for : default-impls {};  // exposition only

  struct default-impls {  // exposition only
    static constexpr auto get-attrs = see below;  // exposition only
    static constexpr auto get-env = see below;    // exposition only
    static constexpr auto get-state = see below;  // exposition only
    static constexpr auto start = see below;      // exposition only
    static constexpr auto complete = see below;   // exposition only
  };
}

概要

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

説明専用のクラスdefault-implsにてSenderアルゴリズム共通動作を記述し、Senderアルゴリズムタグ型Tagを用いてimpls-for<Tag>特殊化を定義することでSenderアルゴリズムの固有動作を静的にオーバーライドする。

説明専用クラス default-impls

get-attrsメンバ

get-attrsは、basic-sender実装におけるSender属性取得のカスタマイゼーションポイントとして機能する。

default-impls::get-attrsメンバは、下記ラムダ式と等価な関数呼び出し可能なオブジェクトで初期化される。

  • Senderchildが1個の場合は、その子Senderの属性を転送する。
  • それ以外の場合は、空の属性env<>()を返す。

[](const auto&, const auto&... child) noexcept -> decltype(auto) {
  if constexpr (sizeof...(child) == 1)
    return (FWD-ENV(get_env(child)), ...);
  else
    return env<>();
}

get-envメンバ

get-envは、basic-receiver実装におけるReceiver環境取得のカスタマイゼーションポイントとして機能する。

default-impls::get-envメンバは、下記ラムダ式と等価な関数呼び出し可能なオブジェクトで初期化される。

[](auto, auto&, const auto& rcvr) noexcept -> decltype(auto) {
  return FWD-ENV(get_env(rcvr));
}

get-stateメンバ

get-stateは、basic-operation実装がメンバ変数として保持する状態(state)取得のカスタマイゼーションポイントとして機能する。

default-impls::get-stateメンバは、下記ラムダ式と等価な関数呼び出し可能なオブジェクトで初期化される。

  • Sendersndrオブジェクト構築時の引数を返す。

[]<class Sndr, class Rcvr>(Sndr&& sndr, Rcvr& rcvr) noexcept -> decltype(auto) {
  auto& [_, data, ...child] = sndr;
  return std::forward_like<Sndr>(data);
}

startメンバ

startは、basic-operation実装における開始(start)のカスタマイゼーションポイントとして機能する。

default-impls::startメンバは、下記ラムダ式と等価な関数呼び出し可能なオブジェクトで初期化される。

[](auto&, auto&, auto&... ops) noexcept -> void {
  (execution::start(ops), ...);
}

completeメンバ

completeは、basic-receiver実装における各種完了操作のカスタマイゼーションポイントとして機能する。

default-impls::completeメンバは、下記ラムダ式と等価な関数呼び出し可能なオブジェクトで初期化される。

  • 完了タグTagと引数リストargsを用いて、接続先Receiverrcvrの完了操作を呼び出す。
  • 第1引数Indexは、default-impls実装では利用しない。
    • 複数の子Senderを保持するSenderアルゴリズムのimpls-forオーバーライド実装で利用する(例 : when_all)。

[]<class Index, class Rcvr, class Tag, class... Args>(
  Index, auto& state, Rcvr& rcvr, Tag, Args&&... args) noexcept
    -> void requires callable<Tag, Rcvr, Args...> {
  static_assert(Index::value == 0);
  Tag()(std::move(rcvr), std::forward<Args>(args)...);
}

バージョン

言語

  • C++26

関連項目

参照