Generics 标量浇注料类型有什么特点吗?
我被这个操作符重载的代码卡住了Generics 标量浇注料类型有什么特点吗?,generics,rust,traits,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 }
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 }
}
}
使用std::ops::Add;
结构测试{
m:T
}
用于测试的impl Add{
类型输出=测试;
fn添加(自身,右侧:测试)->测试{
测试{m:(self.m+rhs.m)as T}
}
}
我不能将(self.m+rhs.m)
转换为T
,因为它是非标量转换
类型scalar castable to
T
是否有特征?否,没有特征涵盖此功能。只有一些强制转换是可能的,它们的完整列表可以在中找到
对于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 }
}
}
使用std::ops::Add;
结构测试{
m:T
}
用于测试的impl Add,其中T:Add{
类型输出=自身;
fn添加(自我,右:自我)->自我{
测试{m:self.m+rhs.m}
}
}
您可以找到一个很好的解释,说明为什么在中需要额外的T:Add
绑定。可能更接近你的真实情况