如何要求泛型类型支持数值运算?

时间:2015-05-07 15:38:17

标签: generics rust

我有一个像这样的结构(和一些方法):

pub struct Foo<T> where T:Ord+Add+Sub {
    bar: T,
    baz: T,
    // ...
}

我需要做一些数值运算(加法,减法等)并存储结果。文档指出SubAdd特征的结果可能是另一种类型。

2 个答案:

答案 0 :(得分:4)

如果你看the Add trait,你会看到:

pub trait Add<RHS = Self> {
    type Output;
    fn add(self, rhs: RHS) -> Self::Output;
}

这是根据+的左和右参数指定结果类型所需的灵活性。

如果您希望将Foo<T>结构限制为T,其T的对称实现本身返回T,则可以{ {1}}条款:

  • 要求where可以添加到TT必须实施T(由于Add<T>默认为RHS,与实施Self
  • 相同
  • 要求结果为AddT必须实现T(关联的类型语法)

类似的原则适用于Add<Output = T>,给出:

Sub

答案 1 :(得分:1)

我不知道“数字类型”是什么意思,但这就是你如何约束类型,使加法和减法产生T

pub struct Foo<T> where T: Ord+Add<Output=T>+Sub<Output=T> {
    ...
}