std::expected<T,E>::transform
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) |
Si *this contiene un valor esperado, invoca a f y devuelve un objeto std::expected que contiene su resultado; en caso contrario, devuelve un objeto std::expected que contiene una copia de error().
Si T no es (posiblemente cv-cualificado) void, el valor contenido (operator*()) se pasa como argumento a f; en caso contrario, f no toma argumentos.
Sea U:
- si
Tno es (posiblemente cv-cualificado)void:- para las sobrecargas (1-2),
std::remove_cv_t<std::invoke_result_t<F, decltype(operator*())>>; - para las sobrecargas (3-4),
std::remove_cv_t<std::invoke_result_t<F, decltype(std::move(operator*()))>>;
- para las sobrecargas (1-2),
- en caso contrario (
Tes posiblemente cv-cualificadovoid),std::remove_cv_t<std::invoke_result_t<F>>.
U debe ser un tipo de valor válido para std::expected. Se debe poder construir una variable de tipo U a partir del resultado de la invocación (pero no necesita ser movible-construible). El tipo de retorno es std::expected<U, E>.
std::is_constructible_v<E, decltype(error())> es true.std::is_constructible_v<E, decltype(std::move(error()))> es true.Formalmente, estas funciones realizan los siguientes pasos:
- Si
*thiscontiene un valor esperadoval:
- Invoca a
fcomo si fuerastd::invoke(std::forward<F>(f), val)para las sobrecargas (1,2) sistd::is_void_v<T>esfalse;std::invoke(std::forward<F>(f), std::move(val))para las sobrecargas (3,4) sistd::is_void_v<T>esfalse;std::invoke(std::forward<F>(f))sistd::is_void_v<T>estrue.
- Entonces:
- si
std::is_void_v<U>esfalse, devuelve un objetostd::expectedque contiene un valor esperado, inicializado directamente desde el resultado de la invocación; - en caso contrario, devuelve
std::expected<U, E>().
- si
- Invoca a
- En caso contrario (
*thiscontiene un valor de error), devuelvestd::expected<U, E>(std::unexpect, error()).
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:
val
)
val
)
)
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
(
)
)
)
|
|
Notas
| Macro de prueba de características | Valor | Estándar | Característica |
|---|---|---|---|
__cpp_lib_expected |
202211L |
(C++23) | Funciones monádicas para std::expected
|
Ejemplo
|
Esta sección está incompleta
Razón: sin 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
|
-
↑
value()requiere queEsea copiable (ver LWG issue 3843 ), mientras queoperator*no lo requiere. - ↑ ** 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) |