Generics 我如何约束trust中的T只接受数字类型?

Generics 我如何约束trust中的T只接受数字类型?,generics,rust,Generics,Rust,我想创建一些具有泛型类型T属性的结构。此泛型类型将用于计算,因此我希望T是所有类型的数值类型,如i32、u32、f32、uf32、i64等。如何实现这一点?这就是可以使用的。对所有数值类型都实现了 这确保您的泛型类型T具有所有预期的数字运算符,Add,Sub,Mul,Div,Rem,可以通过PartialEq进行部分相等检查,它还为1和T公开一个值 您可以看到板条箱如何实现特征: 谢谢,听起来很有希望。但是,Rust语言本身必须有一种方法来实现这一权利?例如,在C#中,有where关键字约束接受

我想创建一些具有泛型类型T属性的结构。此泛型类型将用于计算,因此我希望T是所有类型的数值类型,如i32、u32、f32、uf32、i64等。如何实现这一点?

这就是可以使用的。对所有数值类型都实现了

这确保您的泛型类型
T
具有所有预期的数字运算符,
Add
Sub
Mul
Div
Rem
,可以通过
PartialEq
进行部分相等检查,它还为
1
T
公开一个值

您可以看到板条箱如何实现特征:


谢谢,听起来很有希望。但是,Rust语言本身必须有一种方法来实现这一权利?例如,在C#中,有where关键字约束接受的类型。板条箱本身必须使用某种语言功能来完成此操作。@Midas他们定义了trait
Num
,并为所有标准数字类型实现了它。你可以制作你自己的trait
Num
并在所有数字类型中实现它,但你也可以使用板条箱。看看板条箱是怎么做的,它们只是用水烹调的,除了可能的
复制
trait之外,为什么不取决于你实际需要的trait?这将涵盖未来设计的数字和类似数字的对象(想想复数或非标准尺寸)。
int_trait_impl!(Num for usize u8 u16 u32 u64 isize i8 i16 i32 i64);