std::ranges:: ref_view
|
Определено в заголовочном файле
<ranges>
|
||
|
template
<
ranges::
range
R
>
требует
std::
is_object_v
<
R
>
|
(начиная с C++20) | |
ref_view
является
view
элементов некоторого другого
range
. Он оборачивает ссылку на этот
range
.
Содержание |
Члены данных
| Участник | Описание |
R*
r_
|
указатель на базовый диапазон
( объект-член только для демонстрации* ) |
Функции-члены
создает
ref_view
, который ссылается на заданный диапазон
(public member function) |
|
|
возвращает ссылку на ссылочный диапазон
(public member function) |
|
|
возвращает начальный итератор ссылочного диапазона
(public member function) |
|
|
возвращает страж ссылочного диапазона
(public member function) |
|
|
проверяет, является ли ссылочный диапазон пустым
(public member function) |
|
возвращает размер ссылочного
sized_range
(public member function) |
|
|
(C++26)
|
возвращает приблизительный размер ссылочного
approximately_sized_range
(public member function) |
возвращает указатель на начало ссылочного
contiguous_range
(public member function) |
|
Наследуется от std::ranges::view_interface |
|
|
(C++23)
|
возвращает константный итератор на начало диапазона
(public member function of
std::ranges::view_interface<D>
)
|
|
(C++23)
|
возвращает страж для константного итератора диапазона
(public member function of
std::ranges::view_interface<D>
)
|
|
возвращает, является ли производное представление непустым, предоставляется только если
ranges::empty
применимо к нему
(public member function of
std::ranges::view_interface<D>
)
|
|
возвращает первый элемент в производном представлении, предоставляется если оно удовлетворяет
forward_range
(public member function of
std::ranges::view_interface<D>
)
|
|
возвращает последний элемент в производном представлении, предоставляется только если оно удовлетворяет
bidirectional_range
и
common_range
(public member function of
std::ranges::view_interface<D>
)
|
|
возвращает
n
-й
элемент в производном представлении, предоставляется только если оно удовлетворяет
random_access_range
(public member function of
std::ranges::view_interface<D>
)
|
|
std::ranges::ref_view:: ref_view
|
template
<
/*different-from*/
<
ref_view
>
T
>
requires
std::
convertible_to
<
T, R
&
>
&&
|
(начиная с C++20) | |
Инициализирует
r_
значением
std::
addressof
(
static_cast
<
R
&
>
(
std::
forward
<
T
>
(
t
)
)
)
.
/*different-from*/
<
T, U
>
выполняется тогда и только тогда, когда
std::
remove_cvref_t
<
T
>
и
std::
remove_cvref_t
<
U
>
не являются одним и тем же типом, а перегрузки
_FUN
объявлены как
void
_FUN
(
R
&
)
;
void
_FUN
(
R
&&
)
=
delete
;
.
Параметры
| t | - | диапазон для ссылки |
std::ranges::ref_view:: begin
|
constexpr
ranges::
iterator_t
<
R
>
begin
(
)
const
;
|
(since C++20) | |
Возвращает
ranges::
begin
(
*
r_
)
.
std::ranges::ref_view:: end
|
constexpr
ranges::
sentinel_t
<
R
>
end
(
)
const
;
|
(начиная с C++20) | |
Возвращает
ranges::
end
(
*
r_
)
.
std::ranges::ref_view:: empty
|
constexpr
bool
empty
(
)
const
requires requires { ranges:: empty ( * r_ ) ; } ; |
(начиная с C++20) | |
Возвращает значение
ranges::
empty
(
*
r_
)
.
std::ranges::ref_view:: size
|
constexpr
auto
size
(
)
const
requires ranges:: sized_range < R > ; |
(since C++20) | |
Возвращает
ranges::
size
(
*
r_
)
.
std::ranges::ref_view:: reserve_hint
|
constexpr
auto
size
(
)
const
requires ranges :: approximately_sized_range < R > ; |
(начиная с C++26) | |
Возвращает
ranges
::
reserve_hint
(
*
r_
)
.
std::ranges::ref_view:: data
|
constexpr
auto
data
(
)
const
requires ranges:: contiguous_range < R > ; |
(since C++20) | |
Возвращает
ranges::
data
(
*
r_
)
.
Руководства по выводу типа
|
template
<
class
R
>
ref_view ( R & ) - > ref_view < R > ; |
(начиная с C++20) | |
Вспомогательные шаблоны
|
template
<
class
T
>
constexpr bool enable_borrowed_range < ranges :: ref_view < T >> = true ; |
(начиная с C++20) | |
Эта специализация
std::ranges::enable_borrowed_range
позволяет
ref_view
удовлетворять требованиям
borrowed_range
.
Примечания
| Макрос тестирования возможностей | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_ranges_reserve_hint
|
202502L
|
(C++26) |
ranges::approximately_sized_range
и
reserve_hint
|
Пример
#include <iostream> #include <ranges> int main() { const std::string s{"cosmos"}; const std::ranges::take_view tv{s, 3}; const std::ranges::ref_view rv{tv}; std::cout << std::boolalpha << "call empty(): " << rv.empty() << '\n' << "call size() : " << rv.size() << '\n' << "call begin(): " << *rv.begin() << '\n' << "call end() : " << *(rv.end() - 1) << '\n' << "call data() : " << rv.data() << '\n' << "call base() : " << rv.base().size() << '\n' // ~> tv.size() << "range-for : "; for (const auto c : rv) std::cout << c; std::cout << '\n'; }
Вывод:
call empty(): false call size() : 3 call begin(): c call end() : s call data() : cosmos call base() : 3 range-for : cos
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| P2325R3 | C++20 |
default constructor was provided as
view
must be
default_initializable
|
removed along with the requirement |
Смотрите также
|
(C++11)
|
CopyConstructible
и
CopyAssignable
обёртка ссылки
(шаблон класса) |
|
(C++20)
|
view
с уникальным владением некоторого
range
(шаблон класса) |
|
(C++20)
|
view
который включает все элементы
range
(псевдоним шаблона) (объект адаптера диапазона) |