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

履歴 編集

concept
<ranges>

std::ranges::view(C++20)

namespace std::ranges {
  template<class T>
  concept view = range<T> && movable<T> && default_initializable<T> && enable_view<T>;
}

概要

viewは、ビューを表すコンセプトである。viewの要件は意味論要件がメインなので、enable_viewを特殊化して有効にしない限りviewとはならない。

モデル

Tviewのモデルとなるのは、以下の条件をすべて満たす場合である。

  1. TはO(1)で構築できる
  2. TはO(1)でムーブ代入できる
  3. TはO(1)で破棄できる
  4. copy_constructible<T>false、またはTのコピーコンストラクタがO(1)
  5. copyable<T>false、またはTのコピー代入演算子がO(1)

viewborrowed_rangeには直接の包含関係はないが、要素を所有していると一般にこれらの要件は満たせないため、borrowed_rangeでもある場合が多い。

備考

viewを自作する場合、view_interfaceを基底クラスにすると便利である。

#include <ranges>
#include <string_view>
#include <span>
#include <vector>

int main()
{
  // vectorはviewではない
  static_assert(!std::ranges::view<std::vector<int>>);

  // string_viewはview
  static_assert(std::ranges::view<std::string_view>);

  // spanはview
  static_assert(std::ranges::view<std::span<int>>);
}

出力

バージョン

言語

  • C++20

処理系

参照