Skip to content

Latest commit

 

History

History
103 lines (79 loc) · 2.53 KB

elements_of.md

File metadata and controls

103 lines (79 loc) · 2.53 KB

elements_of

  • ranges[meta header]
  • class template[meta id-type]
  • std::ranges[meta namespace]
  • cpp23[meta cpp]
namespace std::ranges {
  template<range R, class Allocator = allocator<byte>>
  struct elements_of {
    [[no_unique_address]] R range;
    [[no_unique_address]] Allocator allocator = Allocator();
  };

  template<class R, class Allocator = allocator<byte>>
    elements_of(R&&, Allocator = Allocator()) -> elements_of<R&&, Allocator>;
}
  • allocator[link /reference/memory/allocator.md]

概要

ジェネレータstd::generatorを戻り値型とするコルーチンにおいて、co_yield式がネストしたRangeの要素を順次生成することを示すタグ型。

テンプレートパラメータ制約

テンプレートパラメータRrangeコンセプトを満たすこと。

メンバ変数

名前 説明 対応バージョン
range Range C++23
allocator Allocator C++23

#include <generator>
#include <iostream>
#include <ranges>
#include <vector>

std::vector<int> vec{2, 3, 4};

// int値を生成するジェネーレタ・コルーチン
std::generator<int> func()
{
  // 値1を生成する
  co_yield 1;

  // vecの要素を1個づつ生成する
  co_yield std::ranges::elements_of(vec);
  // co_yield vec;では「std::vector<int>型の値を生成」の意味になり、
  // 戻り値型=int型ジェネレータに適合しないためコンパイルエラーとなる。

  // 値5を生成する
  co_yield 5;
}

int main()
{
  // ジェネレータを生成する
  std::generator<int> gen = func();
  // この時点ではコルーチンfuncはサスペンド状態にある

  // ジェネレータにより生成されるRange要素を列挙する
  for (int n : gen) {
    std::cout << n << std::endl;
  }
}
  • std::ranges::elements_of[color ff0000]
  • std::generator[link /reference/generator/generator.md]
  • co_yield[link /lang/cpp20/coroutines.md]

出力

1
2
3
4
5

バージョン

言語

  • C++23

処理系

関連項目

参照