我正在尝试实现一个可以采用任何类型参数的通用结构。
struct Position<T>{
x: T,
y: T,
}
impl<T:Num> Position<T>{
fn add(&self, other: &Position<T>) -> Box<Position<T>>{
box Position{x:self.x + other.x, y:self.y + other.y}
}
fn display(&self) -> String{
"WELCOME ".to_string()
}
}
现在我可以定义
let original_position = Position::<int>{x: 2, y:23};
let another_postion = original_position.add(&original_position);
let welcome = original_postion.display();
没有任何错误
同样,我可以毫无错误地执行以下操作。
let string_position = Position::<String>{x: "x_pos".to_string(), y: "y_pos".to_string()};
现在由于 Num 特征约束,我无法调用以下内容(这很明显)。
string_position.add(&original_position);
但是,我的问题是,由于相同的 Num 特征约束,现在我无法调用以下命令
string_position.display()
上述函数与 Num 类型无关,它只是返回字符串“WELCOME”
我如何需要重写实现,以便 add 方法只能Position<Num>
由任何其他通用实现调用,而 display 可以由任何其他通用实现调用。