7.3 CXX 错误处理

CXX 错误处理 — Comprehensive Rust

译文 · 基于 Comprehensive Rust

原文链接: https://google.github.io/comprehensive-rust/chromium/interoperability-with-cpp/error-handling.html

7.3 CXX 错误处理

CXX 对 Result<T,E> 的支持依赖 C++ 异常,因此我们不能在 Chromium 中使用它。替代方案:

  • Result<T, E> 的 T 部分可以:

    • 通过输出参数返回(例如通过 &mut T)。这要求 T 能跨 FFI 边界传递——例如 T 必须是:
      • 原始类型(如 u32 或 usize)
      • cxx 原生支持、且在失败情形有合适默认值的类型(如 UniquePtr<T>)(不像 Box<T>)。
    • 保留在 Rust 一侧,并通过引用暴露。当 T 是不能跨 FFI 边界传递、也不能存储在 UniquePtr<T> 中的 Rust 类型时,可能需要这样做。
  • Result<T, E> 的 E 部分可以:

    • 作为布尔值返回(例如 true 表示成功,false 表示失败)
    • 保留错误细节在理论上是可能的,但到目前为止实践中尚未需要。

7.3.1 错误处理:QR 示例

01-错误处理:QR 示例 — Comprehensive Rust

7.3.2 错误处理:PNG 示例

02-错误处理:PNG 示例 — Comprehensive Rust

最后修改 August 11, 2026: 更新 (70a5af133)