gpt4 book ai didi

rust - 如何将 Box 转换为 Box

转载 作者:行者123 更新时间:2023-12-03 11:24:00 30 4
gpt4 key购买 nike

在我的程序中,在辅助线程上执行了一些操作及其结果:Result<(), Box<dyn Error>>被发送回主线程。这是非常合理的错误有 Send要求,所以实际类型是Result<(), Box<dyn Error + Send>> .我还加了 Sync能够使用 Box from方法(仅针对普通或同步 + 发送实现)。但是在单线程上确定结果后,我想放弃这个要求。

例子:

use std::error::Error;

fn test1() -> Result<(), Box<dyn Error + Sync + Send>> {
return Err("test1".into());
}
fn test2() -> Result<(), Box<dyn Error>> {
test1()?;
return Ok(());
}
fn main() {
let test2_result = test2();
println!("test2_result: {:#?}", test2_result);
}

最后我实际上以:
   Compiling playground v0.0.1 (/playground)
error[E0277]: the size for values of type `dyn std::error::Error + std::marker::Send + std::marker::Sync` cannot be known at compilation time
--> src/main.rs:7:12
|
7 | test1()?;
| ^ doesn't have a size known at compile-time
|
= help: the trait `std::marker::Sized` is not implemented for `dyn std::error::Error + std::marker::Send + std::marker::Sync`
= note: to learn more, visit <https://doc.rust-lang.org/book/ch19-04-advanced-types.html#dynamically-sized-types-and-the-sized-trait>
= note: required because of the requirements on the impl of `std::error::Error` for `std::boxed::Box<dyn std::error::Error + std::marker::Send + std::marker::Sync>`
= note: required because of the requirements on the impl of `std::convert::From<std::boxed::Box<dyn std::error::Error + std::marker::Send + std::marker::Sync>>` for `std::boxed::Box<dyn std::error::Error>`
= note: required by `std::convert::From::from`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0277`.
error: could not compile `playground`.

To learn more, run the command again with --verbose.

这些类型似乎不兼容。

那么我该如何转换(例如在 test2 中) Result<(), Box<dyn Error + Send>>Result<(), Box<dyn Error>> ?

我知道这可以通过创建包装器来完成,但我不想添加下一个间接级别。

最佳答案

如何在这两种类型之间转换的问题仍然存在。

现在我切换到 https://crates.io/crates/failure用于错误处理的 crate ,其中 Error类型替换 Box<dyn Error + Sync + Send> ,还可以轻松创建自定义和字符串(甚至格式化)错误。

关于rust - 如何将 Box<dyn Error + Sync + Send> 转换为 Box<dyn Error>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59130942/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com