gpt4 book ai didi

rust - 在拥有盒装特征的结构上实现 Deref

转载 作者:行者123 更新时间:2023-11-29 07:49:59 26 4
gpt4 key购买 nike

我想实现 DerefDefrefMut在拥有盒装特征的结构上,例如:

use std::ops::{Deref, DerefMut};

trait Quack {
fn quack(&self);
}

struct QuackWrap {
value: Box<Quack>
}

impl Deref for QuackWrap {
type Target = Box<Quack>;

fn deref<'a>(&'a self) -> &'a Box<Quack> {
&self.value
}
}

impl DerefMut for QuackWrap {
fn deref_mut<'a>(&'a mut self) -> &'a mut Box<Quack> {
&mut self.value
}
}

编译失败,出现以下错误:

src/main.rs:14:5: 16:6 error: method `deref` has an incompatible type for trait: expected bound lifetime parameter 'a, found concrete lifetime [E0053]
src/main.rs:14 fn deref<'a>(&'a self) -> &'a Box<Quack> {
src/main.rs:15 &self.value
src/main.rs:16 }
src/main.rs:20:5: 22:6 error: method `deref_mut` has an incompatible type for trait: expected bound lifetime parameter 'a, found concrete lifetime [E0053]
src/main.rs:20 fn deref_mut<'a>(&'a mut self) -> &'a mut Box<Quack> {
src/main.rs:21 &mut self.value
src/main.rs:22 }

如果我替换 Box<Quack>Box<String> (或类似类型),它有效。问题是 Quack是一种特质。但我不确定为什么会生成错误消息。有什么想法吗?

我的问题类似于another SO question ,但不完全相同。在那个问题中,结构有一个类型参数,以特征作为约束。而在我的问题中,没有类型参数。

我不想混淆这些问题,但我有充分的理由需要 Box<Quack>在我的申请中。 IE。我无法替换 Quack带有类型参数。如果您关心,原因是 discussed further in another SO question .

最佳答案

如有疑问,请添加更多生命周期注释:

use std::ops::{Deref, DerefMut};

trait Quack {
fn quack(&self);
}

struct QuackWrap<'b> {
value: Box<Quack + 'b>
}

impl<'b> Deref for QuackWrap<'b>{
type Target = Box<Quack + 'b>;

fn deref<'a>(&'a self) -> &'a Box<Quack + 'b> {
&self.value
}
}

impl<'b> DerefMut for QuackWrap<'b> {
fn deref_mut<'a>(&'a mut self) -> &'a mut Box<Quack + 'b> {
&mut self.value
}
}

关于rust - 在拥有盒装特征的结构上实现 Deref,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30673285/

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