【发布时间】:2017-09-03 08:22:25
【问题描述】:
我想创建一些具有泛型类型 T 属性的结构。这种泛型类型将用于计算,所以我希望 T 是所有类型的数字类型,例如 i32、u32、f32、uf32、i64等等。我怎样才能做到这一点?
【问题讨论】:
-
除了
Copytrait 之外,为什么不依赖于您实际需要的特征呢?这将涵盖未来设计的数字和类似数字的对象(想想复数或非标准大小)。
我想创建一些具有泛型类型 T 属性的结构。这种泛型类型将用于计算,所以我希望 T 是所有类型的数字类型,例如 i32、u32、f32、uf32、i64等等。我怎样才能做到这一点?
【问题讨论】:
Copy trait 之外,为什么不依赖于您实际需要的特征呢?这将涵盖未来设计的数字和类似数字的对象(想想复数或非标准大小)。
这就是num-traits crate 的用途。 Num trait 适用于所有数字类型。
这确保您的泛型类型 T 具有所有预期的数字运算符,Add、Sub、Mul、Div、Rem,可以通过 PartialEq 进行部分相等检查,它还公开了1 和0 的值,用于T。
你可以看到 crate 如何实现 trait here:
int_trait_impl!(Num for usize u8 u16 u32 u64 isize i8 i16 i32 i64);
【讨论】:
Num 并为所有标准数字类型实现了它。你可以创建自己的 trait Num 并为所有数字类型实现它,但你也可以使用 crate。