Namespaces
Variants

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

From cppreference.net
Utilities library
主模板
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 包含意外值,则使用 * this 的意外值作为参数调用 f ,并返回一个包含意外值的 std::expected 对象,该对象使用 f 的结果进行初始化。否则,返回一个表示期望值的 std::expected 对象。

1-4) 期望值被初始化为 * this 的期望值 val

给定类型 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 )

示例

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的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 自身
(公开成员函数)