- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想实现 Deref
和 DefrefMut
在拥有盒装特征的结构上,例如:
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/
我正在阅读 Rust 的 Deref 文档特点: pub trait Deref { type Target: ?Sized; fn deref(&self) -> &Self::Ta
下面是Deref example from The Rust Programming Language除了我添加了另一个断言。 为什么 assert_eq 和 deref 也等于 'a'?为什么在手动
我想实现 Deref和 DefrefMut在拥有盒装特征的结构上,例如: use std::ops::{Deref, DerefMut}; trait Quack { fn quack(&se
这个问题在这里已经有了答案: Why is the return type of Deref::deref itself a reference? (2 个回答) 1年前关闭。 例如,我有一个实现了
来自 clojure 为勇敢而真实的人: (defmacro enqueue [q concurrent-promise-name & work] (let [concurrent (butl
我正在传递一个链表,其中包含另一个链表到一个函数,但我在从传递的双指针中取消/引用内部链表时遇到问题。 push(*config->inner_linked_list... 行的编译器错误是 '*co
我正在尝试为枚举实现Deref: use std::rc::Rc; use std::ops::Deref; pub trait tObject { fn name(&self) -> Str
我需要为来自外部 crate 的对象实现 fmt::Display 方法,因此我为该对象创建了一个包装器。我希望能够使用原始对象的所有方法,而不必重新定义所有方法。我尝试按照很棒的 IRC chann
这个问题在这里已经有了答案: Why is the return type of Deref::deref itself a reference? (2 个答案) 关闭 5 年前。 以下代码: us
我有: struct Id; struct Url; struct IdAndUrl { id: Id, url: Url, } 我希望能够使用 IdAndUrl在我需要的地方 Id
我经常使用 newtype 模式,但我厌倦了编写 my_type.0.call_to_whatever(...)。我很想实现 Deref 特性,因为它允许编写更简单的代码,因为在某些情况下我可以使用我
我在 Rust 中编写一个 Vector 类只是为了好玩,我认为能够为它实现 Deref 会很好,就像访问元组引用一样访问它。例如,Vec2可以取消引用为 &(f32, f32) .我想到了这个: p
如果能够使用 Deref 从通用容器生成 &TraitType,而不是调用 instance.as_ref() 会更方便。即: (*my_container).do_thing(); 对比 my_co
在这段代码之前,我以为我了解了移动语义。 fn main() { let v = Data { body: vec![10, 40, 30], }; p(&v)
我有一个实现Deref的结构: pub struct Foo { val: u8, } impl Deref for Foo { type Target = u8; fn de
class DogOwner { Dog dog; DogOwner(Dog dog) { this.dog = dog; } } class Dog {
我在尝试将 impl Add for String 添加到标准库时遇到了这个问题。但是我们可以轻松复制它,无需运算符(operator)恶作剧。我们从这个开始: trait MyAdd { f
在阅读了关于 Smart Pointers and Interior mutability 的 Rust 书中的部分之后,作为个人练习,我尝试编写一个函数,该函数将遍历智能指针的链表并返回列表中的“最
这里是 example of usage Deref 的修改版本: use std::ops::Deref; use std::rc::Rc; #[derive(Clone, PartialEq, H
我有一个 String newtype ErrorMessage 我在原型(prototype)箱中用于错误。 (我知道这是一种不好的做法。我将在发布之前构建一组适当的不同错误类型。) 我需要 Err
我是一名优秀的程序员,十分优秀!