|
Console Library 8.0.0
A header-only library that makes C++ simple
|
表示可能成功或失败的结果,类似于 Rust 的 Result 类型。 More...
#include <result.h>
Public Types | |
| typedef T | value_type |
| 成功值类型别名。 | |
| typedef E | error_type |
| 错误值类型别名。 | |
Public Member Functions | |
| Result (const T &value) | |
| 从成功值构造 Result(拷贝)。 | |
| Result (const E &error) | |
| 从错误值构造 Result(拷贝)。 | |
| Result (T &&value) | |
| 从成功值构造 Result(移动)。 | |
| Result (E &&error) | |
| 从错误值构造 Result(移动)。 | |
| Result (const Result &other) | |
| 拷贝构造,深拷贝内部值。 | |
| Result (Result &&other) noexcept | |
| 移动构造,转移内部值。 | |
| Result & | operator= (const Result &other) |
| 拷贝赋值(使用 copy-and-swap 惯用法)。 | |
| Result & | operator= (Result &&other) noexcept |
| 移动赋值(使用 copy-and-swap 惯用法)。 | |
| ~Result () | |
| 析构函数,正确销毁当前存储的值。 | |
| T | ok () const & |
| 获取成功值的副本(左值引用版本)。 | |
| E | err () const & |
| 获取错误值的副本(左值引用版本)。 | |
| T | ok () && |
| 移动获取成功值(右值引用版本)。 | |
| E | err () && |
| 移动获取错误值(右值引用版本)。 | |
| T | unwrap () const |
| 解包成功值,若为错误则抛出异常。 | |
| T | expect (const std::string &msg) const |
| 带自定义消息的解包,若为错误则抛出异常。 | |
| bool | is_ok () const |
| 检查是否为 Ok(成功)状态。 | |
| bool | is_err () const |
| 检查是否为 Err(错误)状态。 | |
| template<class F, class G> | |
| void | visit (F &&f, G &&g) const |
| 访问 Result 的内容,根据状态调用不同的函数。 | |
| template<class F> | |
| auto | and_then (F &&f) const &-> Result< typename std::decay< decltype(f(std::declval< T >()))>::type::value_type, E > |
| 链式操作:若为 Ok 则应用 f,否则传递 Err(左值引用版本)。 | |
| template<class F> | |
| auto | and_then (F &&f) &&-> Result< typename std::decay< decltype(f(std::declval< T >()))>::type::value_type, E > |
| 链式操作:若为 Ok 则应用 f,否则传递 Err(右值引用版本)。 | |
| template<class F> | |
| auto | or_else (F &&f) const &-> Result< T, typename std::decay< decltype(f(std::declval< E >()))>::type::error_type > |
| 链式操作:若为 Err 则应用 f,否则传递 Ok(左值引用版本)。 | |
| template<class F> | |
| auto | or_else (F &&f) &&-> Result< T, typename std::decay< decltype(f(std::declval< E >()))>::type::error_type > |
| 链式操作:若为 Err 则应用 f,否则传递 Ok(右值引用版本)。 | |
| void | swap (Result &other) noexcept |
| 交换两个 Result 的内容。 | |
| operator bool () const | |
| 布尔转换,检查是否为 Ok。 | |
| bool | operator! () const |
| 逻辑非,检查是否为 Err。 | |
| const T & | unwrap_or (const T &default_value) const & |
| 如果是Ok则返回值的引用,否则返回默认值的引用。 | |
| T | unwrap_or (T &&default_value) && |
| 如果是Ok则移动返回值,否则返回默认值。 | |
| template<class F> | |
| T | unwrap_or_else (F &&fn) const & |
| 如果是Ok则返回Ok值,否则通过函数生成默认值。 | |
| template<class F> | |
| T | unwrap_or_else (F &&fn) && |
| 如果是Ok则移动返回值,否则通过函数生成默认值。 | |
| const T * | ok_ptr () const |
| 获取Ok值的指针(可能为空)。 | |
| T * | ok_ptr () |
| 获取Ok值的指针(可能为空)。 | |
| const E * | err_ptr () const |
| 获取Err值的指针(可能为空)。 | |
| E * | err_ptr () |
| 获取Err值的指针(可能为空)。 | |
| bool | operator== (const Result &other) const |
| 相等性比较。 | |
| bool | operator!= (const Result &other) const |
| 不等性比较。 | |
Private Member Functions | |
| T * | get_ok_ptr () const |
| 获取指向成功值 T 的指针(常量)。 | |
| E * | get_err_ptr () const |
| 获取指向错误值 E 的指针(常量)。 | |
Private Attributes | |
| unsigned char | buffer [buffer_size] |
| 对齐的原始字节缓冲区,用于存储 T 或 E。 | |
| bool | is_ok_ |
| 标记当前是否为 Ok 状态(true 表示 Ok,false 表示 Err)。 | |
Static Private Attributes | |
| static constexpr size_t | buffer_size = sizeof(T) > sizeof(E) ? sizeof(T) : sizeof(E) |
| 缓冲区大小,取 T 和 E 中较大者。 | |
| static constexpr size_t | buffer_align = alignof(T) > alignof(E) ? alignof(T) : alignof(E) |
| 缓冲区对齐要求,取 T 和 E 中较大者。 | |
Friends | |
| void | swap (Result &a, Result &b) noexcept |
| 交换两个 Result 的内容(友元函数)。 | |
表示可能成功或失败的结果,类似于 Rust 的 Result 类型。
| T | 成功值的类型。 |
| E | 错误值的类型。 |
Result 要么包含一个 T 类型的成功值(Ok),要么包含一个 E 类型的错误值(Err)。使用对齐的字节缓冲区存储两者之一, 避免了额外的堆分配。访问错误状态的成功值会抛出异常。
| typedef E console::Result< T, E >::error_type |
错误值类型别名。
| typedef T console::Result< T, E >::value_type |
成功值类型别名。
|
inline |
从成功值构造 Result(拷贝)。
| value | 成功值。 |
|
inline |
从错误值构造 Result(拷贝)。
| error | 错误值。 |
|
inline |
从成功值构造 Result(移动)。
| value | 成功值右值。 |
|
inline |
从错误值构造 Result(移动)。
| error | 错误值右值。 |
|
inline |
拷贝构造,深拷贝内部值。
| other | 源 Result。 |
|
inlinenoexcept |
移动构造,转移内部值。
| other | 源 Result,移动后仍保持原状态(值被移动)。 |
|
inline |
析构函数,正确销毁当前存储的值。
|
inline |
链式操作:若为 Ok 则应用 f,否则传递 Err(右值引用版本)。
| F | 映射函数类型,接受 T 返回 Result<U, E>。 |
| f | 应用到成功值的函数。 |
|
inline |
链式操作:若为 Ok 则应用 f,否则传递 Err(左值引用版本)。
| F | 映射函数类型,接受 T 返回 Result<U, E>。 |
| f | 应用到成功值的函数。 |
|
inline |
移动获取错误值(右值引用版本)。
|
inline |
获取错误值的副本(左值引用版本)。
|
inline |
获取Err值的指针(可能为空)。
|
inline |
获取Err值的指针(可能为空)。
|
inline |
带自定义消息的解包,若为错误则抛出异常。
| msg | 异常消息。 |
| ValueError | 若 Result 为 Err 状态,携带 msg。 |
|
inlineprivate |
获取指向错误值 E 的指针(常量)。
|
inlineprivate |
获取指向成功值 T 的指针(常量)。
|
inline |
检查是否为 Err(错误)状态。
|
inline |
检查是否为 Ok(成功)状态。
|
inline |
移动获取成功值(右值引用版本)。
|
inline |
|
inline |
获取Ok值的指针(可能为空)。
|
inline |
获取Ok值的指针(可能为空)。
|
inlineexplicit |
布尔转换,检查是否为 Ok。
|
inline |
逻辑非,检查是否为 Err。
|
inline |
不等性比较。
|
inline |
|
inlinenoexcept |
|
inline |
相等性比较。
|
inline |
链式操作:若为 Err 则应用 f,否则传递 Ok(右值引用版本)。
| F | 映射函数类型,接受 E 返回 Result<T, U>。 |
| f | 应用到错误值的函数。 |
|
inline |
链式操作:若为 Err 则应用 f,否则传递 Ok(左值引用版本)。
| F | 映射函数类型,接受 E 返回 Result<T, U>。 |
| f | 应用到错误值的函数。 |
|
inlinenoexcept |
交换两个 Result 的内容。
| other | 要交换的 Result。 |
|
inline |
|
inline |
如果是Ok则返回值的引用,否则返回默认值的引用。
| default_value | 默认值引用。 |
|
inline |
如果是Ok则移动返回值,否则返回默认值。
| default_value | 默认值。 |
|
inline |
如果是Ok则移动返回值,否则通过函数生成默认值。
| fn | 生成默认值的函数。 |
|
inline |
如果是Ok则返回Ok值,否则通过函数生成默认值。
| fn | 生成默认值的函数。 |
|
inline |
访问 Result 的内容,根据状态调用不同的函数。
| F | Ok 处理函数类型。 |
| G | Err 处理函数类型。 |
| f | 若为 Ok,用成功值调用 f。 |
| g | 若为 Err,用错误值调用 g。 |
类似于模式匹配,根据状态分发到对应的处理函数。
交换两个 Result 的内容(友元函数)。
| a | 第一个 Result。 |
| b | 第二个 Result。 |
|
mutableprivate |
对齐的原始字节缓冲区,用于存储 T 或 E。
|
staticconstexprprivate |
缓冲区对齐要求,取 T 和 E 中较大者。
|
staticconstexprprivate |
缓冲区大小,取 T 和 E 中较大者。
|
private |
标记当前是否为 Ok 状态(true 表示 Ok,false 表示 Err)。