为类型的引用实现添加



我正在尝试为包含数组的结构实现add方法。我想为泛型类型实现方法,这些泛型类型为各自的引用实现AddAssign。以下代码不符合

#[derive(Debug, Copy, Clone)]
pub struct Test<T> {
data: [T; 2]
}
impl<T> Add<&Test<T>> for Test<T> where T: AddAssign<&T> {
type Output = Test<T>;
fn add(mut self, rhs: &Test<T>) -> Self::Output {
self.data.iter_mut().zip(rhs.data.iter()).for_each(|(r, l)| {
*r += l;
});
self
}
}

并给出错误:

impl<T> Add<&Test<T>> for Test<T> where T: AddAssign<&T> {
|                                                      ^ explicit lifetime name needed here

但定义一个生命周期只会带来其他错误。我可以通过取消引用来解决这个问题,但这不是我想要的,因为我相信这会导致不必要的复制。有办法让它发挥作用吗?

生存期需要用于所有存在的引用(impl定义和rhs引用(。以下代码将为我编译:

impl<'a, T> Add<&'a Test<T>> for Test<T> where T: AddAssign<&'a T> {
type Output = Test<T>;
fn add(mut self, rhs: &'a Test<T>) -> Self::Output {
self.data.iter_mut().zip(rhs.data.iter()).for_each(|(r, l)| {
*r += l;
});
self
}
}

最新更新