Namespaces
Variants

C++ named requirements: RangeAdaptorObject (since C++20)

From cppreference.net
C++ named requirements

범위 어댑터 객체 는 첫 번째 인수로 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 ( ) 제약 조건을 만족하는 임의의 인자 그룹인 경우,

호출

모두 동일합니다.

이러한 각 표현식의 결과 객체는 view 객체이거나 RangeAdaptorClosureObject 입니다.

참고 사항

operator ( ) 는 volatile 한정 또는 const-volatile 한정된 범위 어댑터 객체 타입에 대해 지원되지 않습니다. 배열과 함수는 바인딩 시 포인터로 변환됩니다.