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
绑定。可能更接近你的真实情况