Namespaces
Variants

std::expected<T,E>:: transform

From cppreference.net
Utilities library
기본 템플릿
template < class F >
constexpr auto transform ( F && f ) & ;
(1) (C++23부터)
template < class F >
constexpr auto transform ( F && f ) const & ;
(2) (C++23부터)
template < class F >
constexpr auto transform ( F && f ) && ;
(3) (C++23부터)
template < class F >
constexpr auto transform ( F && f ) const && ;
(4) (C++23부터)
void 부분 특수화
template < class F >
constexpr auto transform ( F && f ) & ;
(5) (C++23부터)
template < class F >
constexpr auto transform ( F && f ) const & ;
(6) (C++23부터)
template < class F >
constexpr auto transform ( F && f ) && ;
(7) (C++23부터)
template < class F >
constexpr auto transform ( F && f ) const && ;
(8) (C++23부터)

만약 * this 가 기대값을 나타내는 경우, f 를 호출하고 그 결과로 초기화된 기대값을 포함하는 std::expected 객체를 반환합니다(결과 타입이 void 인 경우 값 초기화됨). 그렇지 않은 경우, * this 의 예상치 못한 값으로 초기화된 예상치 못한 값을 포함하는 std::expected 객체를 반환합니다.

1-4) f val 의 기대값을 인자로 하여 호출됩니다. * this
5-8) f 는 인수 없이 호출됩니다.

주어진 타입 U 는 다음과 같습니다:

1,2) std:: remove_cv_t < std:: invoke_result_t < F, decltype ( ( val ) ) >>
3,4) std:: remove_cv_t < std:: invoke_result_t < F, decltype ( std :: move ( val ) ) >>

다음 조건 중 하나라도 충족되면 프로그램의 형식이 잘못되었습니다:

  • U std::expected 의 유효한 값 타입이 아닙니다.
  • std:: is_void_v < U > false 인 경우, 다음에 해당하는 선언은 올바르지 않습니다:
1,2) U u ( std:: invoke ( std:: forward < F > ( f ) , val ) ) ;
3,4) U u ( std:: invoke ( std:: forward < F > ( f ) , std :: move ( val ) ) ) ;
5-8) U u ( std:: invoke ( std:: forward < F > ( f ) ) ) ;


1,2) 다음 오버로드들은 다음 조건이 std:: is_constructible_v < E, decltype ( error ( ) ) > 일 때만 오버로드 해결에 참여합니다.
3,4) 이 오버로드들은 다음 조건이 충족될 때만 오버로드 해결에 참여합니다: std:: is_constructible_v < E, decltype ( std :: move ( error ( ) ) ) > true 인 경우.
5,6) 이 오버로드들은 다음 조건이 std:: is_constructible_v < E, decltype ( error ( ) ) > 일 때만 오버로드 해결에 참여합니다.
7,8) 이 오버로드들은 다음 조건이 std:: is_constructible_v < E, decltype ( std :: move ( error ( ) ) ) > true 일 때만 오버로드 해결에 참여합니다.

목차

매개변수

f - 적절한 함수 또는 Callable 객체로, 호출 시그니처가 비-참조형을 반환하는

반환값

주어진 표현식 expr 는 다음과 같습니다:

1,2) std:: invoke ( std:: forward < F > ( f ) , val )
3,4) std:: invoke ( std:: forward < F > ( f ) ,std :: move ( val ) )
5-8) std:: invoke ( std:: forward < F > ( f ) )

반환 값은 다음과 같이 정의됩니다:

오버로드 has_value() 의 값
true false
( 1,2 ) std:: expected < U, E > ( std:: unexpect , error ( ) )
( 3,4 ) std:: expected < U, E >
( std:: unexpect , std :: move ( error ( ) ) )
( 5,6 ) std:: expected < U, E > ( std:: unexpect , error ( ) )
( 7,8 ) std:: expected < U, E >
( std:: unexpect , std :: move ( error ( ) ) )

예제

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 수정된 동작
LWG 3938 C++23 기대값이 value ( ) [1] 로 획득됨 다음으로 변경됨 ** this
LWG 3973 C++23 기대값이 ** this [2] 로 획득됨 다음으로 변경됨 val
  1. value() E 가 복사 생성 가능해야 하지만 (참조: LWG 이슈 3843 ), operator* 는 그렇지 않습니다.
  2. ** this 인수 의존적 탐색 을 유발할 수 있습니다.

참고 항목

예상된 값을 포함하고 있으면 expected 자체를 반환하고, 그렇지 않으면 변환된 예상치 못한 값을 포함하는 expected 를 반환합니다
(public member function)