Rust 在具有装箱特征的结构上实现Deref
我希望在具有装箱特征的结构上实现Rust 在具有装箱特征的结构上实现Deref,rust,Rust,我希望在具有装箱特征的结构上实现Deref和DefrefMut,例如: 使用std::ops:{Deref,DerefMut}; 庸医{ fn庸医(和自我); } 结构包装{ 值:框 } 江湖医生的建议{ 类型目标=框; fn deref&一个盒子{ &自我价值 } } QuackWrap的impl-DerefMut{ fn deref_mut和'a mut Box{ &多重自我价值 } } 编译失败,出现以下错误: src/main.rs:14:5:16:6错误:方法'deref'的trai
Deref
和DefrefMut
,例如:
使用std::ops:{Deref,DerefMut};
庸医{
fn庸医(和自我);
}
结构包装{
值:框
}
江湖医生的建议{
类型目标=框;
fn deref&一个盒子{
&自我价值
}
}
QuackWrap的impl-DerefMut{
fn deref_mut和'a mut Box{
&多重自我价值
}
}
编译失败,出现以下错误:
src/main.rs:14:5:16:6错误:方法'deref'的trait类型不兼容:预期绑定生存期参数'a,找到具体生存期[E0053]
src/main.rs:14 fn deref&a Box{
src/main.rs:15和self.value
src/main.rs:16}
src/main.rs:20:5:22:6错误:方法'deref_mut'具有与trait不兼容的类型:预期绑定生存期参数'a,找到具体生存期[E0053]
src/main.rs:20 fn deref_mut和'a mut Box{
src/main.rs:21和mut self.value
src/main.rs:22}
如果我用Box
(或类似类型)替换Box
,它会工作。问题是,庸医
是一种特征。但我不知道为什么会产生这样的错误信息。有什么想法吗
我的问题类似于,但不完全相同。在这个问题中,结构有一个类型参数,其中trait作为约束。而在我的问题中,没有类型参数
我不想混淆这些问题,但有一个很好的理由,我需要在我的应用程序中使用
Box
。也就是说,我不能用类型参数替换Quack
。如果您关心,原因是。如果有疑问,请添加更多的生存期注释:
使用std::ops:{Deref,DerefMut};
庸医{
fn庸医(和自我);
}
结构包装
}
恳求{
键入Target=Box(&'a self)->&'a Box DerefMut for QuackWrap(&'a mut self)->&'a mut Box根据Brian的回答和Shepmaster的解释,我更新了我的代码如下。我还简化了QuackWrap
结构(这不是严格必要的,但可以说是比以前更好的样式)
使用std::ops:{Deref,DerefMut};
庸医{
fn庸医(和自我);
}
结构防震膜(盒);
江湖医生的建议{
键入Target=Box(&'a self)->&'a Box(&'a mut self)->&'a mut-Box具体来说,这很有帮助,因为struct-QuackWrap{value:Box}
相当于struct-QuackWrap{值:Box@Shepmaster谢谢你的解释。我不知道隐式生存期是在哪里添加的,所以我留下了我的答案作为修复。回答为什么它在一开始就坏了是非常有帮助的。type Target=Box;
是type Target=Box
。可能有一种更简洁的方法…-Newtypes(和所有元组结构)提供位置访问器