Я пытаюсь реализовать универсальную структуру, которая может принимать любой параметр типа.
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 мог вызываться любой другой универсальной реализацией.