【发布时间】:2020-08-05 17:30:35
【问题描述】:
我是 Rust 的新手。
我正在尝试在 rust 中实现一个通用函数,但我遇到了问题。我尝试了很多谷歌的例子来获得解决方案,但没有任何效果。请帮帮我。
在下面的代码中,我想为Point 实现add 函数,它可以采用i32 或另一个Point。
fn main() {
println!("Hello world!");
let mut point = Point::new(1,1);
point.add::<i32>(&1);
point.add::<Point>(&point);
}
#[derive(Copy, Clone)]
struct Point {
pub x: i32,
pub y: i32,
}
impl Point {
pub fn new(x: i32, y: i32) -> Point {
Point {x, y}
}
/**
Pseudocode as i don't know how to write this in rust
pub fn add<T: Sized || Point>(&mut self, value: &T) {
if (T is i32) {
self.x += = value;
self.y += value;
} else (T is Point) {
self.x += value.x;
self.y += value.y;
}
}
*/
}
【问题讨论】:
-
您是否考虑过实施From?
-
这能回答你的问题吗? How can I approximate method overloading?
-
@IInspectable 是的,我试过了,但是在为
i32实现From后,调用point.add::<Point>(&point);时出错 -
@E_net4isbeingtargeted,您建议的链接是为
i32和f32实现go方法,但这里我只想为Point实现。