rust - Rust 如何在没有重载函数的情况下设法拥有泛型?

标签 rust

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

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

我知道 Rust 不允许重载函数。

1.) add是在编译时生成的吗?

2.) 如果 1.) 为真,它是如何在不重载函数的情况下实现这一点的?

在我的脑海里,编译器会生成

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

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

最佳答案

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

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

因此,您的两个观点都是正确的:add() 在编译时生成的,是的,您提供的片段正是编译器生成的内容(当然,函数名除外);只是重载与此无关。

关于rust - Rust 如何在没有重载函数的情况下设法拥有泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25460612/

相关文章:

rust - 格式所需的类型注释!解析 postgres 结果时

rust - 我可以在稳定的 Rust 上使用编译器插件吗?

postgresql - Rust Actix-Web sqlx 可选功能 `time` 需要列 #4 ("created_at"的 TIMESTAMPTZ 类型)

rust - rust 交叉编译 ARM : skylake is not a recognized processor for this target

rust - 为什么这个迭代器需要一个生命周期,我该如何给它一个生命周期?

python - 为什么 ANSI 转义码有时可以在 CMD 中工作

unix - 可以将mut i8转换为i32吗?

rust - 我可以从单个字节 (u8) 创建可变切片 &mut [u8] 吗?

parsing - 如何在 Nom 中解析大写字符串?

rust - 如何使用字符串作为键从 `HashMap::<&' static str, u32>` 获取值?