我可以创建一个既可以使用值也可以使用对特征的借用引用的结构?

时间:2015-09-15 02:43:26

标签: rust traits borrow-checker

我想创建一个包装另一种类型的结构,但是可以采用实现给定特征的自有和借用版本的值。

例如,假设我有特征Foobar

trait Foobar {
    fn foobar(&self);
}

我现在想要创建一个包含值或借用此特征引用的结构:

struct FoobarWrapper<T: Foobar> {
    wrapped: T,
    extra_stuff: Stuff
}

在此,我希望FoobarWrapper与Baz同时使用&Bazimpl Foobar for Baz

我提出了一个可行的解决方案,但我不知道它是否是惯用的,而且只是这样做:

impl<'a, T: Foobar> Foobar for &'a T  {
    fn foobar(&self) {
        (*self).foobar()
    }
}

如果我没有弄错的话,这就引用了一个实现Foobar的值,也是Foobar的实现者。但这是你应该这样做的吗?

1 个答案:

答案 0 :(得分:7)

是的,如果你能支持,你的解决方案可能会很好。 Iterator

做同样的事情
impl<'a, I> Iterator for &'a mut I where I: Iterator + ?Sized

您也应该添加?Sized绑定,以获得灵活性。