Namespaces
Variants

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

From cppreference.net
Utilities library
Plantilla principal
template < class F >
constexpr auto transform ( F && f ) & ;
(1) (desde C++23)
template < class F >
constexpr auto transform ( F && f ) const & ;
(2) (desde C++23)
template < class F >
constexpr auto transform ( F && f ) && ;
(3) (desde C++23)
template < class F >
constexpr auto transform ( F && f ) const && ;
(4) (desde C++23)
void Especialización parcial
template < class F >
constexpr auto transform ( F && f ) & ;
(5) (desde C++23)
template < class F >
constexpr auto transform ( F && f ) const & ;
(6) (desde C++23)
template < class F >
constexpr auto transform ( F && f ) && ;
(7) (desde C++23)
template < class F >
constexpr auto transform ( F && f ) const && ;
(8) (desde C++23)

Si * this representa un valor esperado, invoca f y retorna un objeto std::expected que contiene un valor esperado, el cual se inicializa con su resultado (o se inicializa por defecto si el tipo del resultado es void ). De lo contrario, retorna un objeto std::expected que contiene un valor inesperado, el cual se inicializa con el valor inesperado de * this .

1-4) f se invoca con el valor esperado val de * this como argumento.
5-8) f se invoca sin ningún argumento.

Dado el tipo U como:

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 ) ) >>

Si se satisface cualquiera de las siguientes condiciones, el programa está mal formado:

  • U no es un tipo de valor válido para std::expected .
  • std:: is_void_v < U > es false , y la siguiente declaración correspondiente está mal formada:
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) Estas sobrecargas participan en la resolución de sobrecarga solo si std:: is_constructible_v < E, decltype ( error ( ) ) > es true .
3,4) Estas sobrecargas participan en la resolución de sobrecarga solo si std:: is_constructible_v < E, decltype ( std :: move ( error ( ) ) ) > es true .
5,6) Estas sobrecargas participan en la resolución de sobrecarga solo si std:: is_constructible_v < E, decltype ( error ( ) ) > es true .
7,8) Estas sobrecargas participan en la resolución de sobrecarga solo si std:: is_constructible_v < E, decltype ( std :: move ( error ( ) ) ) > es true .

Contenidos

Parámetros

f - una función adecuada u Callable objeto cuya firma de llamada retorna un tipo que no es referencia

Valor de retorno

Dada la expresión expr como:

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 ) )

Los valores de retorno se definen de la siguiente manera:

Sobrecarga Valor de 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 ( ) ) )

Ejemplo

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Se aplica a Comportamiento publicado Comportamiento correcto
LWG 3938 C++23 el valor esperado se obtenía mediante value ( ) [1] cambiado a ** this
LWG 3973 C++23 el valor esperado se obtenía mediante ** this [2] cambiado a val
  1. value() requiere que E sea copiable (ver LWG issue 3843 ), mientras que operator* no lo requiere.
  2. ** this puede activar la búsqueda dependiente de argumentos .

Véase también

retorna el propio expected si contiene un valor esperado; de lo contrario, retorna un expected que contiene el valor inesperado transformado
(función miembro pública)