Exception Class
class Visindigo::General::Exception异常类,用于表示和处理程序中的异常情况。. 详情...
| 头文件: | #include <General/Exception.h> |
| 自以下版本: | Visindigo 0.13.0 |
公开类型
(自 Visindigo 0.13.0 引入) enum | Type { Unknown, Other, IOError, ParseError, InvalidArgument, …, Std_BadVariantAccess } |
公开成员函数
(自 Visindigo 0.13.0 引入) | Exception(Visindigo::General::Exception::Type type, QString message = "", bool critical = true, QString file = "", int line = 0, QString func = "", QList<Visindigo::General::StacktraceFrame> stacktrace = {}) |
(自 Visindigo 0.13.0 引入) | Exception(const Visindigo::General::Exception &other) |
(自 Visindigo 0.13.0 引入) | Exception(Visindigo::General::Exception &&other) |
(自 Visindigo 0.13.0 引入) virtual | ~Exception() |
(自 Visindigo 0.13.0 引入) QString | getFile() const |
(自 Visindigo 0.13.0 引入) QString | getFunction() const |
(自 Visindigo 0.13.0 引入) int | getLine() const |
(自 Visindigo 0.13.0 引入) QString | getMessage() const |
(自 Visindigo 0.13.0 引入) QList<Visindigo::General::StacktraceFrame> | getStacktrace() const |
(自 Visindigo 0.13.0 引入) Visindigo::General::Exception::Type | getType() const |
(自 Visindigo 0.13.0 引入) bool | isCritical() const |
(自 Visindigo 0.13.0 引入) QString | toString() const |
(自 Visindigo 0.13.0 引入) const char * | what() const |
(自 Visindigo 0.13.0 引入) Visindigo::General::Exception & | operator=(Visindigo::General::Exception &&other) |
(自 Visindigo 0.13.0 引入) Visindigo::General::Exception & | operator=(const Visindigo::General::Exception &other) |
静态公开成员
(自 Visindigo 0.13.0 引入) Visindigo::General::Exception | fromStdException(const std::exception &e) |
详细说明
Exception 类用于表示程序中的异常情况。它包含异常的类型、消息、严重性、 发生位置(文件名、行号、函数名)以及堆栈跟踪信息。
这类与std::exception无关,但可以通过fromStdException函数将std::exception转换为 此类的实例。此类也同样实现了std风格的what()函数,以便与标准异常处理机制兼容。
这类是不可变的,一旦创建,其内容就不能更改。
成员类型文档
[since Visindigo 0.13.0] enum Exception::Type
| Constant | Value | Description |
|---|---|---|
Visindigo::General::Exception::Unknown | 0x0000000 | 未知异常类型,值为0x0000000 |
Visindigo::General::Exception::Other | 0x1 | 其他异常类型 |
Visindigo::General::Exception::IOError | 0x2 | 输入输出异常类型 |
Visindigo::General::Exception::ParseError | 0x3 | 解析异常类型 |
Visindigo::General::Exception::InvalidArgument | 0x4 | 无效参数异常类型 |
Visindigo::General::Exception::OutOfRange | 0x5 | 越界异常类型 |
Visindigo::General::Exception::NotFound | 0x6 | 未找到异常类型 |
Visindigo::General::Exception::AlreadyExists | 0x7 | 已存在异常类型 |
Visindigo::General::Exception::PermissionDenied | 0x8 | 权限拒绝异常类型 |
Visindigo::General::Exception::Timeout | 0x9 | 超时异常类型 |
Visindigo::General::Exception::UnsupportedOperation | 0xa | 不支持的操作异常类型 |
Visindigo::General::Exception::InternalError | 0xb | 内部错误异常类型 |
Visindigo::General::Exception::OutOfMemory | 0xc | 内存不足异常类型 |
Visindigo::General::Exception::Std_Unknown | 0x8000000 | 标准未知异常类型,值为0x8000000 |
Visindigo::General::Exception::Std_Other | 0x8000001 | 标准其他异常类型 |
Visindigo::General::Exception::Std_LogicError | 0x8000002 | std::logic_error |
Visindigo::General::Exception::Std_InvalidArgument | 0x8000003 | std::invalid_argument |
Visindigo::General::Exception::Std_DomainError | 0x8000004 | std::domain_error |
Visindigo::General::Exception::Std_LengthError | 0x8000005 | std::length_error |
Visindigo::General::Exception::Std_OutOfRange | 0x8000006 | std::out_of_range |
Visindigo::General::Exception::Std_FutureError | 0x8000007 | std::future_error |
Visindigo::General::Exception::Std_RuntimeError | 0x8000008 | std::runtime_error |
Visindigo::General::Exception::Std_RangeError | 0x8000009 | std::range_error |
Visindigo::General::Exception::Std_OverflowError | 0x800000a | std::overflow_error |
Visindigo::General::Exception::Std_UnderflowError | 0x800000b | std::underflow_error |
Visindigo::General::Exception::Std_RegexError | 0x800000c | std::regex_error |
Visindigo::General::Exception::Std_SystemError | 0x800000d | std::system_error |
Visindigo::General::Exception::Std_IOFailure | 0x800000e | std::ios_base::failure |
Visindigo::General::Exception::Std_FileSystemError | 0x800000f | std::filesystem::filesystem_error |
Visindigo::General::Exception::Std_TXException | 0x8000010 | ISO/IEC TS 19841:2015 标准的事务异常类型,这是个技术预览内容, 目前尚未被纳入C++标准,也没有关于它的从std::exception转换到此类型的支持。 |
Visindigo::General::Exception::Std_LocalTimeNone | 0x8000011 | std::chrono::nonexistent_local_time |
Visindigo::General::Exception::Std_LocalTimeAmbiguous | 0x8000012 | std::chrono::ambiguous_local_time |
Visindigo::General::Exception::Std_FormatError | 0x8000013 | std::format_error |
Visindigo::General::Exception::Std_BadTypeid | 0x8000014 | std::bad_typeid |
Visindigo::General::Exception::Std_BadCast | 0x8000015 | std::bad_cast |
Visindigo::General::Exception::Std_BadAnyCast | 0x8000016 | std::bad_any_cast |
Visindigo::General::Exception::Std_BadOptionalAccess | 0x8000017 | std::bad_optional_access |
Visindigo::General::Exception::Std_BadExpectedAccess | 0x8000018 | std::bad_expected_access |
Visindigo::General::Exception::Std_BadWeakPtr | 0x8000019 | std::bad_weak_ptr |
Visindigo::General::Exception::Std_BadFunctionCall | 0x800001a | std::bad_function_call |
Visindigo::General::Exception::Std_BadAlloc | 0x800001b | std::bad_alloc |
Visindigo::General::Exception::Std_BadArrayNewLength | 0x800001c | std::bad_array_new_length |
Visindigo::General::Exception::Std_BadException | 0x800001d | std::bad_exception |
Visindigo::General::Exception::Std_BadVariantAccess | 0x800001e | std::bad_variant_access |
这个 enum 从 Visindigo 0.13.0 开始支持。
成员函数文档
[since Visindigo 0.13.0] Exception::Exception(Visindigo::General::Exception::Type type, QString message = "", bool critical = true, QString file = "", int line = 0, QString func = "", QList<Visindigo::General::StacktraceFrame> stacktrace = {})
构造函数,使用指定的参数创建一个异常对象。
type 异常类型。 message 异常消息本体。 critical 是否为严重异常。 file 发生异常的源文件名。 line 发生异常的行号。 func 函数名称。
这个 function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] Exception::Exception(const Visindigo::General::Exception &other)
拷贝构造函数
这个 function 从 Visindigo 0.13.0 开始支持。
[noexcept, since Visindigo 0.13.0] Exception::Exception(Visindigo::General::Exception &&other)
移动构造函数
这个 function 从 Visindigo 0.13.0 开始支持。
[virtual noexcept, since Visindigo 0.13.0] Exception::~Exception()
析构函数,销毁异常对象。
这个 function 从 Visindigo 0.13.0 开始支持。
[static, since Visindigo 0.13.0] Visindigo::General::Exception Exception::fromStdException(const std::exception &e)
e 标准异常对象 将标准异常对象转换为 Visindigo::General::Exception 对象。
由于标准异常对象的信息有限,转换后的异常对象的类型将被设置为 Unknown, 消息将包含标准异常的 what() 信息,其他信息(如文件名、行号、函数名和堆栈跟踪)将为空或默认值。
这个 function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] QString Exception::getFile() const
return 发生异常的源文件名
这个 function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] QString Exception::getFunction() const
return 发生异常的函数名称
这个 function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] int Exception::getLine() const
return 发生异常的行号
这个 function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] QString Exception::getMessage() const
return 异常消息本体
要获取全部异常信息,请使用toString()函数。
what()函数返回与此相同的内容。
这个 function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] QList<Visindigo::General::StacktraceFrame> Exception::getStacktrace() const
return 异常的堆栈跟踪信息
这个 function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] Visindigo::General::Exception::Type Exception::getType() const
return 异常类型
这个 function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] bool Exception::isCritical() const
return 异常是否为严重异常
如果程序理应立即终止,则异常应为严重异常。
推荐将所有异常都设置为严重异常,除非您非常确定异常不会影响程序的正常运行。
由于C++的灵活性,完整的异常安全性几乎无法保证,因此建议将大部分异常都视为严重异常,以确保程序的稳定性。
这个 function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] QString Exception::toString() const
return 将异常信息格式化为字符串表示形式。
这是个用于调试的辅助函数,Visindigo输出日志时不依赖此函数,因此调用此函数 输出的结果和在日志上看到的结果有所不同。
这个 function 从 Visindigo 0.13.0 开始支持。
[noexcept, since Visindigo 0.13.0] const char *Exception::what() const
return 异常的标准异常描述字符串。
此函数返回与getMessage()函数相同的内容。
这个 function 从 Visindigo 0.13.0 开始支持。
另请参阅 getMessage().
[noexcept, since Visindigo 0.13.0] Visindigo::General::Exception &Exception::operator=(Visindigo::General::Exception &&other)
移动赋值运算符
这个 function 从 Visindigo 0.13.0 开始支持。
[since Visindigo 0.13.0] Visindigo::General::Exception &Exception::operator=(const Visindigo::General::Exception &other)
拷贝赋值运算符
这个 function 从 Visindigo 0.13.0 开始支持。