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

履歴 編集

customization point object
<execution>

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

namespace std::execution {
  struct just_t { unspecified };
  inline constexpr just_t just{};
}

概要

justは、非同期操作開始(start)値完了関数を呼び出すSenderファクトリである。

効果

説明用のパックtsに対して、パックTsdecltype((ts))とする。下記いずれかの条件をみたすとき、呼び出し式just(ts...)不適格となる。

そうでなければ、呼び出し式just(ts...)は下記と等価。

make-sender(just, product-type{ts...})

Senderアルゴリズムタグ just

Senderアルゴリズム動作説明用のクラステンプレートimpls-forに対して、下記の特殊化が定義される。

namespace std::execution {
  template<>
  struct impls-for<decayed-typeof<just>> : default-impls {
    static constexpr auto start =
      [](auto& state, auto& rcvr) noexcept -> void {
        auto& [...ts] = state;
        set_value(std::move(rcvr), std::move(ts)...);
      };
  };
}

カスタマイゼーションポイント

Receiverとの接続(connect)時に、関連付けられた実行ドメインに対してexecution::transform_sender経由でSender変換が行われる。 デフォルト実行ドメインでは無変換。

#include <string>
#include <print>
#include <execution>
namespace ex = std::execution;
using namespace std::string_literals;

int main()
{
  // 空の値を送信するSender
  ex::sender auto snd0 = ex::just();
  std::tuple<> result0 = std::this_thread::sync_wait(snd0).value();
  std::println("result0={}", result0);

  // 値"C++"を送信するSender
  ex::sender auto snd1 = ex::just("C++"s);
  std::tuple<std::string> result1 = std::this_thread::sync_wait(snd1).value();
  std::println("result1={}", result1);

  // 値(123,'X')を送信するSender
  ex::sender auto snd2 = ex::just(123, 'X');
  std::tuple<int, char> result2 = std::this_thread::sync_wait(snd2).value();
  std::println("result2={}", result2);
}

出力

result0=()
result1=("C++")
result2=(123, 'X')

バージョン

言語

  • C++26

処理系

関連項目

参照