标量可转换类型是否有特征?
Is there a trait for scalar-castable types?
我被这个运算符重载代码困住了。
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
。
标量可转换为 T
的类型有特征吗?
不,没有涵盖此功能的特性。只有一些演员是可能的,他们的完整列表可以在 The Book.
中找到
至于您的 Add
实现,您应该按以下方式修改它以使其工作:
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>
界限可能更接近你的确切情况。
我被这个运算符重载代码困住了。
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
。
标量可转换为 T
的类型有特征吗?
不,没有涵盖此功能的特性。只有一些演员是可能的,他们的完整列表可以在 The Book.
中找到至于您的 Add
实现,您应该按以下方式修改它以使其工作:
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>
界限可能更接近你的确切情况。