Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 在具有装箱特征的结构上实现Deref_Rust - Fatal编程技术网

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(和所有元组结构)提供位置访问器