2017-09-03 89 views
1

我想创建一些具有泛型类型T的属性的结构体。这个泛型类型将用于计算,所以我希望T是各种数字类型,比如i32,u32,f32,uf32,i64等。我怎样才能做到这一点?如何限制Rust中的T只接受数字类型?

+0

为什么不取决于你实际需要的特质,除了也许'Copy'特质?这将涵盖将来设计的数字和类似数字的对象(考虑复数或非标准尺寸)。 – user4815162342

回答

5

这就是num-traits crate可用于什么。 Num trait适用于所有数字类型。

这可以确保您的泛型类型T具有所有预期数值运算,AddSubMulDivRem,可以部分通过平等检查PartialEq,它也暴露了10T的值。

你可以看到箱子是如何实现的特质here

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

谢谢,这听起来很有希望。但是,Rust语言本身必须有一种方法来实现这一权利?在C#中,例如,您拥有限制接受类型的where关键字。箱子本身必须使用某种语言功能才能做到这一点。 – Midas

+1

@Midas他们定义了特征'Num'并为所有标准数字类型实现了它。您可以创建自己的特征'Num'并将其应用于所有数字类型,但您最好使用该箱子。 – Lukazoid

+3

只要看看箱子是干什么的,他们只用水做饭 – the8472

相关问题