rust怎么给pub type DTaskCallback = Box<dyn Fn() -> i32>;实现Clone?
时间: 2023-07-16 21:17:17 浏览: 89
:package::sparkles: 你最喜欢的 rust -> wasm 工作流程工具!
由于 `Box<dyn Fn() -> i32>` 是一个 trait 对象,它实际上是一个指向一个实现了 `Fn() -> i32` 特质的对象的指针。这意味着它不是一个具体的类型,而是一个动态分发的类型。
由于 Rust 不支持在 trait 对象上直接实现 Clone 特质,因此您需要使用 Rust 的动态分发机制来实现 Clone。具体来说,您可以在 `Box<dyn Fn() -> i32>` 的外层包装一个 `Rc` 或 `Arc`,然后在 `Rc` 或 `Arc` 上实现 Clone 特质。然后您可以使用 `Rc::clone` 或 `Arc::clone` 来复制整个包装器。
以下是一个示例代码:
```rust
use std::rc::Rc;
pub type DTaskCallback = Rc<Box<dyn Fn() -> i32>>;
impl Clone for DTaskCallback {
fn clone(&self) -> Self {
Rc::clone(self)
}
}
```
在这个示例中,我们使用 `Rc` 来包装 `Box<dyn Fn() -> i32>`,并在 `Rc` 上实现了 Clone 特质。然后我们可以使用 `Rc::clone` 来克隆整个包装器。
阅读全文