Generics 元组上std::ops的通用实现

Generics 元组上std::ops的通用实现,generics,rust,Generics,Rust,我想在元组上添加和子。简单的实现似乎不起作用 impl-Add for(u32,u32){ 类型输出=(u32,u32); fn add(self,other:self)->self::Output{ (self.0+other.0,self.1+other.1) } } 对于每一个原语来说,这样做需要大量的样板文件。如何使用泛型实现这一点,并为已经实现std::ops::Add的每个基元(或其他对象)编写一个实现Rust不允许您创建自己的运算符或重载任意运算符。但是,通过实现与操作符关联的特

我想在元组上添加
。简单的实现似乎不起作用

impl-Add for(u32,u32){
类型输出=(u32,u32);
fn add(self,other:self)->self::Output{
(self.0+other.0,self.1+other.1)
}
}

对于每一个原语来说,这样做需要大量的样板文件。如何使用泛型实现这一点,并为已经实现
std::ops::Add

的每个基元(或其他对象)编写一个实现Rust不允许您创建自己的运算符或重载任意运算符。但是,通过实现与操作符关联的特征,可以重载std::ops中列出的操作和相应特征

只有在当前板条箱中定义的特征才能用于任意类型

所以我的解决方案是使用tuple struct
struct My2(T,T)

使用std::ops::Add;
#[派生(调试,部分Q)]
结构My2(T,T);
My2的impl Add{
类型输出=自身;
fn add(self,other:self)->self::Output{
Self(Self.0+other.0,Self.1+other.1)
}
}
fn main(){
断言(My2(1,0)+My2(2,3),My2(3,3));
}

你是说如果不实现一个新的结构,这是不可能的吗?首选的解决方案是实现它,我可以做
let-sumed\u tup=tup\u a+tup\u b
,其中的元组类似于
let-tup\u a=(1,1)
。否则我可能只是手动操作,因为添加一个新的结构似乎不必要的复杂。是的,只有当前板条箱中的类型。
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));
}