我坚持使用此代码进行运算符重载。
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
的特征?
答案 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可能更接近您的确切情况。