我应该如何修改rust程序来运行它?

问题描述 投票:0回答:2

此代码无法运行

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
}
rust
2个回答
0
投票

一个解决方案可能是将

Copy
特征添加到第一个示例中的代码中,然后引用变量:

fn sum1<T:std::ops::Add<Output = T> + Copy>(a:&T,b:&T)->T{
  *a + *b
}

0
投票

问题是您只为

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
}
© www.soinside.com 2019 - 2024. All rights reserved.