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, invokes f y devuelve un objeto std::expected que contiene su resultado; de lo contrario, devuelve un objeto std::expected que contiene una copia de error().
Si T no es (posiblemente calificada-cv void, el valor contenido (operator*()) se pasa a f como argumento; de lo contrario, f no toma argumento.
Sea U:
- si
Tno es (posiblemente calificada-cvvoid:- 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),
- de lo contrario (
Tes posiblemente calificada-cvvoid),std::remove_cv_t<std::invoke_result_t<F>>.
U debe ser un tipo válido para std::expected. Una variable de tipo U debe ser construible a partir del resultado de la invocación (pero no necesita ser construible por movimiento). 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 ejecutan los siguientes pasos:
- Si
*thiscontiene un valor esperadoval:
- Invocan
fcomo si fuera porstd::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, directamente-inicializado del resultado de la invocación; - de lo contrario, devuelve
std::expected<U, E>().
- si
- Invocan
- De lo contrario (
*thiscontiene un valor de error), devuelvestd::expected<U, E>(std::unexpect, error()).
Parámetros
| f | - | Una función adecuada o un objeto Callable cuya signatura de llamada devuelva un tipo no referencia. |
Valor de retorno
Un objeto std::expected que contiene o bien el resultado de f o un valor de error, como se describe anteriormente.
Notas
| Macro de prueba de 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 de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
| ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 3938 | C++23 | El valor esperado se obtenía por value(), que requiere que E sea construible por copia.
|
Se cambió a **this.
|
| LWG 3973 | C++23 | El valor esperado se obtenía por **this, que puede activar la búsqueda dependiente de argumento.
|
Se cambió para nombrar al miembro directamente. |
Véase también
Devuelve el propio objeto expected si contiene un valor esperado; de lo contrario, devuelve un objeto expected que contiene el valor no esperado transformado. (función miembro pública) |