#clone #dyn-clone #object-safe #renamed #traits #sized #io-crates-dyn-clone

废弃 objekt

重命名为 dyn-clone: https://crates.io/crates/dyn-clone

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

Download history 354/week @ 2024-03-14 569/week @ 2024-03-21 600/week @ 2024-03-28 449/week @ 2024-04-04 520/week @ 2024-04-11 499/week @ 2024-04-18 529/week @ 2024-04-25 425/week @ 2024-05-02 442/week @ 2024-05-09 481/week @ 2024-05-16 508/week @ 2024-05-23 588/week @ 2024-05-30 438/week @ 2024-06-06 421/week @ 2024-06-13 466/week @ 2024-06-20 333/week @ 2024-06-27

1,728 monthly downloads
72 包中(直接使用 11 个)

MIT/Apache

6KB

对象安全的 Clone 特性

github crates.io docs.rs build status

此包提供了一个 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 许可证定义的,您有意提交以包含在此包中的任何贡献,都将根据上述许可证双重许可,不附加任何额外条款或条件。

无运行时依赖