我想创建一个包装另一种类型的结构,但是可以采用实现给定特征的自有和借用版本的值。
例如,假设我有特征Foobar
:
trait Foobar {
fn foobar(&self);
}
我现在想要创建一个包含值或借用此特征引用的结构:
struct FoobarWrapper<T: Foobar> {
wrapped: T,
extra_stuff: Stuff
}
在此,我希望FoobarWrapper与Baz
同时使用&Baz
和impl Foobar for Baz
。
我提出了一个可行的解决方案,但我不知道它是否是惯用的,而且只是这样做:
impl<'a, T: Foobar> Foobar for &'a T {
fn foobar(&self) {
(*self).foobar()
}
}
如果我没有弄错的话,这就引用了一个实现Foobar的值,也是Foobar的实现者。但这是你应该这样做的吗?
答案 0 :(得分:7)
是的,如果你能支持,你的解决方案可能会很好。 Iterator
与
impl<'a, I> Iterator for &'a mut I where I: Iterator + ?Sized
您也应该添加?Sized
绑定,以获得灵活性。