std::ranges:: ref_view
|
헤더에 정의됨
<ranges>
|
||
|
template
<
ranges::
range
R
>
requires
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)
|
범위의 시작을 가리키는 상수 반복자를 반환합니다
(
std::ranges::view_interface<D>
의 public member function)
|
|
(C++23)
|
범위의 상수 반복자에 대한 센티널을 반환합니다
(
std::ranges::view_interface<D>
의 public member function)
|
|
파생된 뷰가 비어 있지 않은지 반환합니다 (
ranges::empty
가 적용 가능한 경우에만 제공됨)
(
std::ranges::view_interface<D>
의 public member function)
|
|
파생된 뷰의 첫 번째 요소를 반환합니다 (
forward_range
를 만족하는 경우에 제공됨)
(
std::ranges::view_interface<D>
의 public member function)
|
|
파생된 뷰의 마지막 요소를 반환합니다 (
bidirectional_range
와
common_range
를 만족하는 경우에만 제공됨)
(
std::ranges::view_interface<D>
의 public member function)
|
|
파생된 뷰의
n
번째
요소를 반환합니다 (
random_access_range
를 만족하는 경우에만 제공됨)
(
std::ranges::view_interface<D>
의 public member function)
|
|
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
;
|
(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 > ; |
(C++20 이후) | |
r_
이 참조하는 범위에 대해
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 > ; |
(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 | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| P2325R3 | C++20 |
기본 생성자가 제공되었으며
view
는 반드시
default_initializable
이어야 함
|
요구 사항과 함께 제거됨 |
참고 항목
|
(C++11)
|
CopyConstructible
및
CopyAssignable
참조 래퍼
(클래스 템플릿) |
|
(C++20)
|
일부
range
을 고유 소유하는
view
(클래스 템플릿) |
|
(C++20)
|
range
의 모든 요소를 포함하는
view
(별칭 템플릿) (범위 어댑터 객체) |