在这段代码中,
我预期这些特性能够组成,以便我可以编写一个通用的
然而,我遇到了一个编译器错误:
MyDeref
与标准库中的 Deref
的定义相匹配,而 MemoryView
(从一个更复杂的示例简化而来)也几乎如此。pub trait MyDeref {
type Target: ?Sized;
fn deref<'a>(&'a self) -> &'a Self::Target;
}
pub trait MemoryView {
type T;
fn at_ref<'a>(&'a self) -> &'a Self::T;
}
我预期这些特性能够组成,以便我可以编写一个通用的
MemoryView
实现,涵盖任何解引用为 MemoryView
的类型。impl<V: MemoryView, T: MyDeref<Target=V>> MemoryView for T {
type T = V::T;
fn at_ref<'a>(&'a self) -> &'a Self::T {
self.deref().at_ref()
}
}
然而,我遇到了一个编译器错误:
error[E0309]: the parameter type `V` may not live long enough
--> src/lib.rs:14:9
|
14 | self.deref().at_ref()
| ^^^^^^^^^^^^ ...so that the type `V` will meet its required lifetime bounds
看起来它在说方法签名暗示了Self
和Self::T
的生命周期比'a
长,但不意味着Self::Target
的生命周期比a
长。
我很难想象Self::Target
的生命周期如何比Self
更短。对于明显的Deref
类型,比如&'a Target
和Box<Target>
,这是不可能的。
我也很难写出某种特质约束,表明Self::Target
的生命周期比Self
长。
这个通用实现感觉应该是可能的。帮帮忙!