- ranges[meta header]
- std::ranges[meta namespace]
- class template[meta id-type]
- cpp20[meta cpp]
namespace std::ranges {
template<copy_constructible T>
requires is_object_v<T>
class single_view : public view_interface<single_view<T>> { …… }; // (1) C++20
template<move_constructible T>
requires is_object_v<T>
class single_view : public view_interface<single_view<T>> { …… }; // (1) C++23
namespace views {
inline constexpr /*unspecified*/ single = /*unspecified*/; // (2)
}
}
- (1): 値を要素1つのRangeに見せる
view
- (2):
single_view
を生成するカスタマイゼーションポイントオブジェクト
borrowed |
sized |
output |
input |
forward |
bidirectional |
random_access |
contiguous |
common |
viewable |
view |
|
○ |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
- 式
views::single(E)
の効果はsingle_view<decay_t<decltype((E))>>(E)
と等しい。
名前 |
説明 |
対応バージョン |
size |
要素数を取得する |
C++20 |
| 名前 | 説明 | 対応バージョン |
|----------------------------------------------|------------------------------ ----|----------------|
| operator bool
| Rangeが空でないかどうかを判定する | C++20 |
| front
| 先頭要素への参照を取得する | C++20 |
| back
| 末尾要素への参照を取得する | C++20 |
| operator[]
| 要素へアクセスする | C++20 |
#include <ranges>
#include <iostream>
int main() {
using namespace std;
for(int n : views::single(1)) {
cout << n;
}
}
- views::single[color ff0000]
namespace std::ranges {
template<copy_constructible T>
requires is_object_v<T>
class single_view : public view_interface<single_view<T>> {
private:
copyable-box<T> value_;
public:
single_view() requires default_initializable<T> = default;
constexpr explicit single_view(const T& t): value_(t) {
}
constexpr explicit single_view(T&& t): value_(t) {
}
template<class... Args>
requires constructible_from<T, Args...>
constexpr explicit single_view(in_place_t, Args&&... args): value_{in_place, forward<Args>(args)...} {
}
constexpr T* begin() noexcept {
return data();
}
constexpr const T* begin() const noexcept {
return data();
}
constexpr T* end() noexcept {
return data() + 1;
}
constexpr const T* end() const noexcept {
return data() + 1;
}
static constexpr size_t size() noexcept {
return 1;
}
constexpr T* data() noexcept {
return value_.operator->();
}
constexpr const T* data() const noexcept {
return value_.operator->();
}
};
template<class T>
single_view(T) -> single_view<T>;
}
- copy_constructible[link /reference/concepts/copy_constructible.md]
- default_initializable[link /reference/concepts/default_initializable.md]
- constructible_from[link /reference/concepts/constructible_from.md]
- is_object_v[link /reference/type_traits/is_object.md]
- view_interface[link view_interface.md]
- copyable-box[link copyable_box.md]
- Clang: 13.0.0 [mark verified]
- GCC: 10.1.0 [mark verified]
- ICC: ?
- Visual C++: 2019 Update 10 [mark verified]