std::ranges::ref_view

< cpp‎ | ranges
定义于头文件 <ranges>
template<ranges::range R>

    requires std::is_object_v<R>

class ref_view : public ranges::view_interface<ref_view<R>>
(C++20 起)

ref_view 是某个其他 range 的元素的 view 。它包装到该 range 的引用。

辅助模板

template<class T>
inline constexpr bool enable_borrowed_range<ranges::ref_view<T>> = true;

std::ranges::enable_borrowed_range 的此特化使得 ref_view 满足 borrowed_range

数据成员

std::ranges::ref_view::r_

R* r_ = nullptr; /* exposition-only */

指向被引用范围的指针

成员函数

std::ranges::ref_view::ref_view

constexpr ref_view() noexcept = default;
(1)
template<__NotSameAs<ref_view> T>

    requires std::convertible_to<T, R&> && requires { _FUN(std::declval<T>()); }

constexpr ref_view(T&& t);
(2)
1)nullptr 初始化 r_ 。默认初始化的 ref_view 不引用 range
2)std::addressof(static_cast<R&>(std::forward<T>(t))) 初始化 r_

名称 __NotSameAs_FUN 仅为说明。 __NotSameAs<T, U> 当且仅当 !std::same_as<std::remove_cvref_t<T>, std::remove_cvref_t<U>> 才得到满足。函数 _FUN 声明为 void _FUN(R&); void _FUN(R&&) = delete;

参数

t - 要引用的范围

std::ranges::rev_view::base

constexpr R& base() const;

等价于 return *r_;

std::ranges::ref_view::begin

constexpr ranges::iterator_t<R> begin() const;

等价于 return ranges::begin(*r_);

std::ranges::ref_view::end

constexpr ranges::sentinel_t<R> end() const;

等价于 return ranges::end(*r_);

std::ranges::ref_view::empty

constexpr bool empty() const
    requires requires { ranges::empty(*r_); };

等价于 return ranges::empty(*r_);

std::ranges::ref_view::size

constexpr auto size() const

    requires ranges::sized_range<R>

{ return ranges::size(*r_); }

std::ranges::ref_view::data

constexpr auto data() const

    requires ranges::contiguous_range<R>

{ return ranges::data(*r_); }

推导指引

template<class R>
ref_view(R&) -> ref_view<R>;

示例

参阅

可复制构造 (CopyConstructible) 可复制赋值 (CopyAssignable) 的引用包装器
(类模板)
包含 range 的所有元素的 view
(别名模板) (范围适配器对象)