4 个版本
0.2.0 | 2019 年 12 月 23 日 |
---|---|
0.1.2 | 2019 年 1 月 24 日 |
0.1.1 | 2018 年 6 月 10 日 |
0.1.0 | 2018 年 1 月 13 日 |
#10 in #object-safe
1,728 monthly downloads
在 72 个 包中(直接使用 11 个)
6KB
对象安全的 Clone 特性
此包提供了一个 DynClone
特性,可以在特质对象中使用,以及一个 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();
}
此包包含一个宏,用于生成 impl std::clone::Clone for Box<dyn MyTrait>
的实现,该实现基于 dyn_clone::clone_box
。
// 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 许可证定义的,您有意提交以包含在此包中的任何贡献,都将根据上述许可证双重许可,不附加任何额外条款或条件。