18 个稳定版本
1.0.17 | 2024 年 2 月 26 日 |
---|---|
1.0.16 | 2023 年 11 月 3 日 |
1.0.14 | 2023 年 9 月 19 日 |
1.0.12 | 2023 年 7 月 15 日 |
1.0.1 | 2019 年 12 月 23 日 |
#31 in Rust 模式
2,759,998 每月下载量
在 4,843 个 crate 中使用 (295 个直接使用)
15KB
164 行
对象安全的 Clone 特性
此 crate 提供了一个 DynClone
特性,可用于 trait 对象,以及一个 clone_box
函数,可以克隆任何大小的或动态大小的 DynClone
实现。实现了标准库的 std::clone::Clone
特性的类型可以自动用于 DynClone
特性对象。
clone_box
的签名是
fn clone_box<T>(t: &T) -> Box<T>
where
T: ?Sized + DynClone
示例
use dyn_clone::DynClone;
trait MyTrait: DynClone {
fn recite(&self);
}
impl MyTrait for String {
fn recite(&self) {
println!("{} ♫", self);
}
}
fn main() {
let line = "The slithy structs did gyre and gimble the namespace";
// Build a trait object holding a String.
// This requires String to implement MyTrait and std::clone::Clone.
let x: Box<dyn MyTrait> = Box::new(String::from(line));
x.recite();
// The type of x2 is a Box<dyn MyTrait> cloned from x.
let x2 = dyn_clone::clone_box(&*x);
x2.recite();
}
此 crate 包含一个宏,用于生成基于 dyn_clone::clone_box
的 impl std::clone::Clone for Box<dyn MyTrait>
实现
// As before.
trait MyTrait: DynClone {
/* ... */
}
dyn_clone::clone_trait_object!(MyTrait);
// Now data structures containing Box<dyn MyTrait> can derive Clone:
#[derive(Clone)]
struct Container {
trait_object: Box<dyn MyTrait>,
}
许可协议
根据您的选择,此代码库受 Apache 许可协议 2.0 版 或 MIT 许可协议 许可。除非您明确声明,否则任何有意提交以包含在此代码库中的贡献,根据 Apache-2.0 许可协议定义,应如上所述双许可,而无需任何附加条款或条件。