Rust не позволяет вам создавать свои собственные операторы или перегружать произвольные операторы. Но вы можете перегрузить операции и соответствующие признаки, перечисленные в std :: ops, реализовав свойства, связанные с оператором.
Для произвольных типов могут быть реализованы только черты, определенные в текущем ящике .
Поэтому мое решение заключается в использовании структуры кортежей struct My2<T>(T, T);
:
use std::ops::Add;
#[derive(Debug, PartialEq)]
struct My2<T>(T, T);
impl<T: Add<Output = T>> Add for My2<T> {
type Output = Self;
fn add(self, other: Self) -> Self::Output {
Self(self.0 + other.0, self.1 + other.1)
}
}
fn main() {
assert_eq!(My2(1, 0) + My2(2, 3), My2(3, 3));
}