Namespaces
Variants

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

来自 zh.cppreference.net
 
 
 
 
主模板
template< class F >
constexpr auto transform_error( F&& f ) &;
(1) (自 C++23 起)
template< class F >
constexpr auto transform_error( F&& f ) const&;
(2) (自 C++23 起)
template< class F >
constexpr auto transform_error( F&& f ) &&;
(3) (自 C++23 起)
template< class F >
constexpr auto transform_error( F&& f ) const&&;
(4) (自 C++23 起)
void 部分特化
template< class F >
constexpr auto transform_error( F&& f ) &;
(5) (自 C++23 起)
template< class F >
constexpr auto transform_error( F&& f ) const&;
(6) (自 C++23 起)
template< class F >
constexpr auto transform_error( F&& f ) &&;
(7) (自 C++23 起)
template< class F >
constexpr auto transform_error( F&& f ) const&&;
(8) (自 C++23 起)

如果 *this 包含一个非预期值,则使用 f 的该非预期值作为参数调用 *this,并返回一个 std::expected 对象,该对象包含一个用 f 的结果初始化的非预期值。否则,返回一个表示预期值的 std::expected 对象。

1-4) 预期值用 val 的预期值 *this 初始化。

给定类型 G 为:

1,2) std::remove_cv_t<std::invoke_result_t<F, decltype(error())>>
3,4) std::remove_cv_t<std::invoke_result_t<F, decltype(std::move(error()))>>
5,6) std::remove_cv_t<std::invoke_result_t<F, decltype(error())>>
7,8) std::remove_cv_t<std::invoke_result_t<F, decltype(std::move(error()))>>

如果满足以下任一条件,则程序为良构的:

  • G 不是 std::unexpected 的合法模板实参。
  • 以下对应的声明为非法:
1,2) G g(std::invoke(std::forward<F>(f), error()));
3,4) G g(std::invoke(std::forward<F>(f), std::move(error()));
5,6) G g(std::invoke(std::forward<F>(f), error()));
7,8) G g(std::invoke(std::forward<F>(f), std::move(error()));


1,2) 此重载仅在 std::is_constructible_v<T, decltype((val))> 为 true 时参与重载决议。
3,4) 此重载仅在 std::is_constructible_v<T, decltype(std::move(val))> 为 true 时参与重载决议。

参数

f - 一个合适的函数或 Callable 对象,其调用签名返回非引用类型

返回值

给定表达式 expr 为:

1,2) std:: invoke ( std:: forward < F > ( f ) , error ( ) )
3,4) std:: invoke ( std:: forward < F > ( f ) , std :: move ( error ( ) ) )
5,6) std:: invoke ( std:: forward < F > ( f ) , error ( ) )
7,8) std:: invoke ( std:: forward < F > ( f ) , std :: move ( error ( ) ) )

返回值定义如下:

重载版本 has_value() 的值
true false
( 1,2 ) std:: expected < T, G > ( std:: in_place , val ) std:: expected < T, G >
( std:: unexpect , expr )
( 3,4 ) std:: expected < T, G > ( std:: in_place , std :: move ( val ) )
( 5,6 ) std:: expected < T, G > ( )
( 7,8 )

注解

功能测试宏 值 标准 功能
__cpp_lib_expected 202211L (C++23) std::expected
的单子函数

示例

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的C++标准。

缺陷报告 应用于 发布时的行为 正确行为
LWG 3938 C++23 期望值通过 value ( ) [1] 获取 改为 ** this
LWG 3973 C++23 期望值通过 ** this [2] 获取 改为 val
  1. ↑ value() 要求 E 可复制构造(参见 LWG 问题 3843 ),而 operator* 无此要求。
  2. ↑ ** this 可能触发 实参依赖查找 。

参见

若 expected 包含期望值则返回其自身;否则返回给定函数对非期望值的处理结果
(公开成员函数)
若存在期望值则返回包含转换后期望值的 expected ;否则返回 expected 自身
(公开成员函数)