Non-propagating cache (C++20)
|
template
<
class
T
>
requires
std::
is_object_v
<
T
>
|
(C++20부터)
( 설명 전용* ) |
|
일부 범위 어댑터들, 예를 들어
ranges::join_view
와
ranges::lazy_split_view
는 설명 전용( exposition-only ) 클래스 템플릿
non-propagating-cache
로 지정된 값(예: 반복자)을 조건부로 저장합니다.
이 래퍼는 다음과 같은 점을 제외하면 std:: optional < T > 와 완전히 동일하게 동작합니다:
- 복사 생성되거나 할당될 때 소스의 값을 복사하지 않으며,
- 이동된 후에는 소스의 값을 재설정하고,
- 할당받을 때 자신의 값을 재설정하며,
- 반복되는 동안 입력 뷰가 값을 임시로 캐시할 수 있도록 멤버 함수 템플릿을 추가로 제공합니다.
래퍼는 값을 포함하는 캐시를 캡슐화합니다. 캐시 클리어는 포함된 값을 리셋하는 것과 동등한 연산입니다. 이러한 연산은 래퍼를 복사하거나 이동할 때 수행됩니다.
목차 |
템플릿 매개변수
| T | - | 포함된 값의 타입, 반드시 객체 타입이어야 함 |
멤버 함수
복사 및 이동 생성자
|
constexpr
/*non-propagating-cache*/
( const /*non-propagating-cache*/ & ) noexcept { } |
(1) | (since C++20) |
|
constexpr
/*non-propagating-cache*/
( /*non-propagating-cache*/ && other ) noexcept { other. reset ( ) ; } |
(2) | (since C++20) |
복사 및 이동 할당 연산자
|
constexpr
/*non-propagating-cache*/
&
operator
=
(
const
/*non-propagating-cache*/
&
other
)
noexcept
|
(1) | (since C++20) |
|
constexpr
/*non-propagating-cache*/
&
operator
=
(
/*non-propagating-cache*/
&&
other
)
noexcept
|
(2) | (since C++20) |
non-propagating-cache
<T>::
emplace-deref
|
template
<
class
I
>
constexpr T & /*emplace-deref*/ ( const I & i ) ; |
(C++20 이후)
( 설명 전용* ) |
|
포함된 값을 직접 초기화 로 (단, 직접 목록 초기화는 제외) * i 로 초기화합니다. 호출 전에 * this 가 이미 값을 포함하고 있다면, reset ( ) 이 호출됩니다.
새로운 포함된 값에 대한 참조를 반환합니다.
어떤 가상 변수
t
에 대해 선언
T t
(
*
i
)
;
이
올바른 형식이 아닌 경우 프로그램의 형식이 잘못되었습니다.
*
i
가
가능한 cv-한정된
T
의 prvalue인 경우, 이동 가능할 필요는 없습니다.
std::optional과 동일한 멤버
멤버 함수
optional
객체를 생성함
(
std::optional<T>
의 public 멤버 함수)
|
|
|
포함된 값이 있는 경우 이를 파괴함
(
std::optional<T>
의 public 멤버 함수)
|
|
|
내용을 할당함
(
std::optional<T>
의 public 멤버 함수)
|
|
관찰자 |
|
|
포함된 값에 접근함
(
std::optional<T>
의 public 멤버 함수)
|
|
|
객체가 값을 포함하는지 확인함
(
std::optional<T>
의 public 멤버 함수)
|
|
수정자 |
|
|
포함된 값을 파괴함
(
std::optional<T>
의 public 멤버 함수)
|
|
|
포함된 값을 제자리에서 생성함
(
std::optional<T>
의 public 멤버 함수)
|
|
참고 사항
non-propagating-cache
는 구현에서
begin
(
)
의 결과를 캐싱하기 위해 사용되며, 이 메서드의 분할 상환된 상수 시간 복잡도를 제공합니다.
참고 항목
|
(C++20)
|
view
의
range
s
를 평탄화하여 얻은 시퀀스로 구성된
view
(클래스 템플릿) (range adaptor 객체) |
범위들의 view를 평탄화하여 얻은 시퀀스로 구성된
view
(요소 사이에 구분자 포함)
(클래스 템플릿) (range adaptor 객체) |
|
|
(C++20)
|
구분자를 사용하여 다른
view
를 분할하여 얻은 하위 범위들에 대한
view
(클래스 템플릿) (range adaptor 객체) |
구분자를 사용하여 다른
view
를 분할하여 얻은 하위 범위들에 대한
view
(클래스 템플릿) (range adaptor 객체) |
|
|
(C++23)
|
다른
view
의 요소들을
N
크기의 겹치지 않는 연속적인 청크로 구성된
view
s
의 범위
(클래스 템플릿) (range adaptor 객체) |