2 个版本
0.1.1 | 2024 年 2 月 7 日 |
---|---|
0.1.0 | 2024 年 2 月 7 日 |
#3 in #可克隆
3KB
不使用不安全操作的可克隆对象特质
use clonable_trait_object::clonable_trait_object;
/*El primer parametro es el trait objetivo
el segundo parametro es el nombre que le daras al trait
que hara de Clone*/
clonable_trait_object!(Animal,AnimalClone);
trait Animal: AnimalClone {
fn speak(&self);
}
#[derive(Clone,Debug)]
struct Dog {
name: String,
}
impl Dog {
fn new(name: &str) -> Dog {
Dog {
name: name.to_string(),
}
}
}
impl Animal for Dog {
fn speak(&self) {
println!("{}: ruff, ruff!", self.name);
}
}
#[derive(Clone)]
struct AnimalHouse {
animal: Box<dyn Animal>,
}
fn main() {
let house = AnimalHouse {
animal: Box::new(Dog::new("Bobby")),
};
let house2 = house.clone();
house2.animal.speak();
}