此代码无法运行
fn main() {
let a = 2;
let b = 3;
println!("{}",sum1(&a,&b));
}
fn sum1<T:std::ops::Add<Output = T>>(a:&T,b:&T)->T{
a + b
}
使用(a:T,b:T)可以运行,下面的代码也可以运行
fn main() {
let a = 2;
let b = 3;
println!("{}",sum1(&a,&b));
}
fn sum1(a:&i32,b:&i32)->T{
a + b
}
一个解决方案可能是将
Copy
特征添加到第一个示例中的代码中,然后引用变量:
fn sum1<T:std::ops::Add<Output = T> + Copy>(a:&T,b:&T)->T{
*a + *b
}
问题是您只为
std::ops::Add
定义了 T
的运动轨迹,而不为 &T
。
你可以做的是:
fn sum1<T>(a:&T,b:&T)->T
where
for<'a> &'a T: std::ops::Add<&'a T, Output = T> {
a + b
}