fn add<T: std::ops::Add<Output = T>>(a: T, b: T) -> T {
a + b
}
类型参数和trait约束的作用
- 类型参数
T
:
- 它代表了一种抽象的数据类型。在函数定义
fn add<T>(a: T, b: T) -> T
中,T
作为函数的类型参数,可以在函数体中代表任意类型。这使得函数具有通用性,能够处理不同具体类型的数据,而不需要为每种类型都编写一个单独的函数。例如,T
可以是 i32
,f64
等。
- trait 约束
T: std::ops::Add<Output = T>
:
T: std::ops::Add
表示类型 T
必须实现 std::ops::Add
trait。这个trait定义了加法操作 +
。只有实现了这个trait的类型才能作为参数传递给 add
函数,因为函数体中使用了 a + b
操作。
<Output = T>
是 std::ops::Add
trait 中的一个关联类型约束。它确保 a + b
操作的结果类型与参数类型 T
相同。例如,如果 T
是 i32
,i32
实现 Add
trait 时,其 Output
类型也是 i32
,这样才能保证函数返回值类型与参数类型一致。如果没有这个约束,可能会出现加法操作结果类型与参数类型不匹配的情况,导致编译错误。