【问题标题】:How can I constrain T in Rust to accept only numeric types? [duplicate]如何将 Rust 中的 T 限制为仅接受数字类型? [复制]
【发布时间】:2017-09-03 08:22:25
【问题描述】:

我想创建一些具有泛型类型 T 属性的结构。这种泛型类型将用于计算,所以我希望 T 是所有类型的数字类型,例如 i32、u32、f32、uf32、i64等等。我怎样才能做到这一点?

【问题讨论】:

  • 除了Copy trait 之外,为什么不依赖于您实际需要的特征呢?这将涵盖未来设计的数字和类似数字的对象(想想复数或非标准大小)。

标签: generics rust


【解决方案1】:

这就是num-traits crate 的用途。 Num trait 适用于所有数字类型。

这确保您的泛型类型 T 具有所有预期的数字运算符,AddSubMulDivRem,可以通过 PartialEq 进行部分相等检查,它还公开了10 的值,用于T

你可以看到 crate 如何实现 trait here

int_trait_impl!(Num for usize u8 u16 u32 u64 isize i8 i16 i32 i64);

【讨论】:

  • 谢谢,这听起来很有希望。但是,Rust 语言本身必须有一种方法来实现这一点,对吗?例如,在 C# 中,您有 where 关键字来限制接受的类型。 crate 本身一定是使用了某种语言特性来做到这一点。
  • @Midas 他们定义了特征Num 并为所有标准数字类型实现了它。你可以创建自己的 trait Num 并为所有数字类型实现它,但你也可以使用 crate。
  • 看看板条箱是做什么的,他们只是用水做饭
猜你喜欢
  • 2013-01-14
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多