我有一个像这样的结构(和一些方法):
pub struct Foo<T> where T:Ord+Add+Sub {
bar: T,
baz: T,
// ...
}
我需要做一些数值运算(加法,减法等)并存储结果。文档指出Sub
或Add
特征的结果可能是另一种类型。
答案 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
可以添加到T
,T
必须实施T
(由于Add<T>
默认为RHS
,与实施Self
)Add
,T
必须实现T
(关联的类型语法)类似的原则适用于Add<Output = T>
,给出:
Sub
答案 1 :(得分:1)
我不知道“数字类型”是什么意思,但这就是你如何约束类型,使加法和减法产生T
:
pub struct Foo<T> where T: Ord+Add<Output=T>+Sub<Output=T> {
...
}