为类型的引用实现添加
Implementing add for reference of type
我正在尝试为包含数组的结构实现 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
}
}
我正在尝试为包含数组的结构实现 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
}
}