C++ named requirements: RangeAdaptorObject (since C++20)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
범위 어댑터 객체
는 첫 번째 인수로
viewable_range
를 받고
view
를 반환하는 커스터마이제이션 포인트 객체입니다. 일부 범위 어댑터 객체는 단항(unary)입니다. 즉, 하나의
viewable_range
만을 유일한 인수로 취합니다. 다른 범위 어댑터 객체는
viewable_range
와 다른 후행 인수들을 취합니다.
범위 어댑터 객체가 단일 인수만을 취하는 경우, 이는 또한 RangeAdaptorClosureObject 입니다.
범위 어댑터 객체가 둘 이상의 인수를 취하는 경우, 부분 적용도 지원합니다: 즉
- a 를 범위 어댑터 객체로 하고,
- args... 를 인수(일반적으로 후행 인수에 적합한)로 한다,
표현식 a ( args... ) 은 다음 속성을 가집니다:
-
이는 모든 인수
e
에 대해
args...
중
E가 decltype ( ( e ) ) 일 때, std:: is_constructible_v < std:: decay_t < E > , E > 가 true 인 경우에만 유효합니다. - 호출이 유효할 때, 그 결과 객체는 args... 의 모든 인수 e 에 대해 std:: forward < E > ( e ) 로 직접 비-목록 초기화된 std:: decay_t < E > 타입의 하위 객체를 저장합니다(즉, 범위 어댑터 객체는 인수를 값으로 바인딩합니다).
- 결과 객체는 RangeAdaptorClosureObject 입니다.
- RangeAdaptorClosureObject 를 호출하면 바인딩된 인수(있는 경우)가 연관된 범위 어댑터 객체로 전달됩니다. 바인딩된 인수(있는 경우)는 RangeAdaptorClosureObject 의 값 범주와 cv-한정자를 가진 것으로 간주됩니다. 즉, a ( args... ) ( r ) 는 std:: bind_back ( a, args... ) ( r ) 와 동등합니다(단, 전자는 파이프 구문도 지원합니다). (C++23부터)
다른 사용자 지정 지점 객체들과 마찬가지로, 다음을 가정합니다
- a 는 임의의 범위 어댑터 객체 타입의 cv-unqualified 버전의 객체이고,
- args... 는 a 의 타입의 operator ( ) 제약 조건을 만족하는 임의의 인자 그룹인 경우,
호출
- a ( args... ) ,
- std:: as_const ( a ) ( args... ) ,
- std :: move ( a ) ( args... ) , 그리고
- std :: move ( std:: as_const ( a ) ) ( args... )
모두 동일합니다.
이러한 각 표현식의 결과 객체는
view
객체이거나
RangeAdaptorClosureObject
입니다.
참고 사항
operator ( ) 는 volatile 한정 또는 const-volatile 한정된 범위 어댑터 객체 타입에 대해 지원되지 않습니다. 배열과 함수는 바인딩 시 포인터로 변환됩니다.