#hash #dyn #trait-object #data-structures

无 std dyn-hash

对象安全的哈希 trait

4 个版本

0.2.0 2024年3月23日
0.1.2 2023年11月3日
0.1.1 2023年11月3日
0.1.0 2023年11月3日

#1021Rust 模式

Download history 1001/week @ 2024-04-22 696/week @ 2024-04-29 974/week @ 2024-05-06 1881/week @ 2024-05-13 1935/week @ 2024-05-20 2745/week @ 2024-05-27 2804/week @ 2024-06-03 2901/week @ 2024-06-10 3584/week @ 2024-06-17 3664/week @ 2024-06-24 2967/week @ 2024-07-01 4426/week @ 2024-07-08 3878/week @ 2024-07-15 3752/week @ 2024-07-22 3254/week @ 2024-07-29 2924/week @ 2024-08-05

14,021 每月下载量
36crate(7 个直接)中使用

MIT/Apache

12KB
84

对象安全的哈希 trait

github crates.io docs.rs build status

此 crate 提供了一个 DynHash trait,可用于 trait 对象。实现了标准库的 std::hash::Hash trait 的类型可以自动由 DynHash trait 对象使用。

示例

use dyn_hash::DynHash;

trait MyTrait: DynHash {
    /* ... */
}

// Implement std::hash::Hash for dyn MyTrait
dyn_hash::hash_trait_object!(MyTrait);

// Now data structures containing Box<dyn MyTrait> can derive Hash:
#[derive(Hash)]
struct Container {
    trait_object: Box<dyn MyTrait>,
}

在没有 dyn-hash crate 的情况下,一个 trait trait MyTrait: std::hash::Hash {...} 不会是对象安全的(dyn MyTrait)。

error[E0038]: the trait `MyTrait` cannot be made into an object
 --> src/main.rs:7:12
  |
7 |     let _: &dyn MyTrait;
  |            ^^^^^^^^^^^^ `MyTrait` cannot be made into an object
  |
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.net.cn/reference/items/traits.html#object-safety>
 --> $SYSROOT/lib/rustlib/src/rust/library/core/src/hash/mod.rs
  |
  |     fn hash<H: Hasher>(&self, state: &mut H);
  |        ^^^^ ...because method `hash` has generic type parameters

许可证

根据您的选择,此 crate 受Apache 许可证版本 2.0MIT 许可证的许可。
除非您明确声明,否则根据 Apache-2.0 许可证的约定,您有意提交给此 crate 的任何贡献都将根据上述条款双许可,不附加任何其他条款或条件。

无运行时依赖