最終更新日時(UTC): 2025年07月08日 15時33分39秒
Akira Takahashi が更新

履歴 編集

class template
<ranges>

# std::ranges::view_interface(C++20)

    namespace std::ranges {
      template<class D>
        requires is_class_v<D> && same_as<D, remove_cv_t<D>>
      class view_interface { …… };
    }

## 概要

`view_interface`は、`view`を実装する際に便利なクラステンプレートである。

使用するときは、`D`で`view_interface`を公開継承した上で派生クラス`D`を`view_interface`のテンプレート引数にする(CRTP)。

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

`D`は`view_interface<D>`の派生クラスであること。

## メンバ関数

これらのメンバ関数は、`std::ranges`以下のカスタマイゼーションポイントオブジェクトを使って実装されており、テンプレート引数`D`として渡されたRange型に対して該当する呼び出しが可能な場合のみオーバーロード解決に参加する。

名前 | 説明 | 対応バージョン
--- | --- | ---
`empty` | Rangeが空かどうかを判定する | C++20
`operator bool` | Rangeが空でないかどうかを判定する | C++20
`data` | Rangeの先頭へのポインタを取得する | C++20
`size` | 要素数を取得する | C++20
`front` | 先頭要素への参照を取得する | C++20
`back` | 末尾要素への参照を取得する | C++20
`operator[]` | 要素へアクセスする | C++20
`cbegin` | 定数イテレータを取得する | C++23
`cend` | 定数イテレータ（番兵）を取得する | C++23
`derived` | `D`へダウンキャストする (説明専用) | C++20

## バージョン

### 言語

- C++20

### 処理系

- Clang: 13.0.0 ✅
- GCC: 10.1.0 ✅
- ICC: ?
- Visual C++: 2019 Update 10 ✅

## 関連項目

- `enable_view`

## 参照

- N4861 24 Ranges library
- C++20 ranges
- LWG Issue 3549. `view_interface` is overspecified to derive from `view_base`
- P2278R4 `cbegin` should always return a constant iterator