Rust如何在没有重载函数的情况下设置泛型?

时间:2014-08-23 09:44:40

标签: rust

fn add<T: Add<T,T>>(a: T, b: T) -> T{
    a + b
}
fn main() {

    println!("{}", add(10i,5));
}

我知道Rust不允许重载功能。

1。)是否在编译时生成了添加?

2。)如果1.)为真,那么在没有重载函数的情况下如何实现呢?

在我脑海中,编译器会生成

fn add(a: i32, b: i32) -> i32{
    a + b
}

fn add(a: f32, b: f32) -> f32{
    a + b
}

1 个答案:

答案 0 :(得分:4)

通常函数重载意味着你自己可以定义具有相同名称但具有不同参数集的函数。由于Rust没有重载,它不会编译第二段代码。

然而,泛型可用于实现简单的重载形式 - 当“重载”函数具有完全相同的实现时,但使用不同类型。

所以,你的两点都是正确的:add() 在编译时生成的,是的,你提供的代码片段正是编译器生成的东西(函数名称除外) , 当然);这就是重载与此无关。