gpt4 book ai didi

rust - 是否可以从Self中获取非借入类型?

转载 作者:行者123 更新时间:2023-12-03 11:34:24 25 4
gpt4 key购买 nike

我正在Rust上使用newtype模式在数组上创建Vector2类型:

#[derive(Debug, Clone, Copy)]
struct Vector2([f64; 2]);

我已经在 &Vector2上实现了add运算符,但是我想知道是否可以从 Self指定输出类型。也就是说,我有一个 Self,它是一个 &Vector2,我想知道是否可以“取消引用” Self以获得 Vector2类型。

我有以下代码可以正常工作,但是我想知道是否可以将 type Output = Vector2;行替换为 type Output = *Self;之类的代码

impl std::ops::Add for &Vector2 {
type Output = Vector2;

fn add(self, other: Self) -> Vector2 {
Vector2 {
0: [self.0[0] + other.0[0], self.0[1] + other.0[1]]
}
}
}

这可能吗?

最佳答案

您不能按原样使用*Self,但是可以通过辅助特征和整体实现获得所需的内容:

trait Pointer {
type Pointed;
}
impl<T> Pointer for &T {
type Pointed = T;
}

现在,您可以将代码编写为:
impl std::ops::Add for &Vector2 {
type Output = <Self as Pointer>::Pointed;
//...
}

当然,您还需要为 &mut T*const T*mut T添加impls。

我想应该有一个箱子可以做到这一点,但我没有找到它。当我需要它时,我只是逐字地写了它。

关于rust - 是否可以从Self中获取非借入类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59570643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com