5

我想制作一个包装另一种类型但可以采用实现给定特征的值的拥有和借用版本的结构。

例如,假设我有 trait 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 的实现者。但这是你应该这样做的方式吗?

4

1 回答 1

7

是的,如果你能支持它,你的解决方案可能很好。Iterator做同样的事情

impl<'a, I> Iterator for &'a mut I where I: Iterator + ?Sized

为了灵活性,您可能还应该添加?Sized边界。

于 2015-09-15T03:48:06.673 回答