标量可投射类型是否有特征?

时间:2017-01-26 08:01:09

标签: generics rust traits

我坚持使用此代码进行运算符重载。

use std::ops::Add;

struct Test<T: Add>{
    m:T
}

impl<T:Add> Add for Test<T>{
    type Output = Test<T>;
    fn add(self, rhs: Test<T>) -> Test<T> {
        Test { m: (self.m + rhs.m) as T }
    }
}

我无法将(self.m + rhs.m)投放到T,因为它是non-scalar cast

scalar-castable类型是否有T的特征?

1 个答案:

答案 0 :(得分:4)

不,没有涵盖此功能的特性。只有一些演员表是可能的,他们的完整列表可以在The Book中找到。

对于您的use std::ops::Add; struct Test<T: Add>{ m: T } impl<T> Add for Test<T> where T: Add<Output = T> { type Output = Self; fn add(self, rhs: Self) -> Self { Test { m: self.m + rhs.m } } } 实施,您应该按以下方式对其进行修改,以使其正常工作:

T: Add<Output = T>

您可以找到一个很好的解释,为什么this SO answer中需要额外的{{1}}限制。 This one可能更接近您的确切情况。

相关问题