5

別の型をラップする構造体を作成したいのですが、特定の特性を実装する値の所有バージョンと借用バージョンの両方を取ることができます。

たとえば、私が特性を持っているとしましょうFoobar:

trait Foobar {
    fn foobar(&self);
}

この特性の値または借用した参照をラップする構造体を作成したいと思います。

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

Bazここでは、FoobarWrapper が両方で動作するようにしたいと考え&Bazていimpl Foobar for Bazます。

うまくいくかもしれない解決策を1つ思いつきましたが、それが慣用的であるかどうかはわかりません。それは単に行うことです:

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 に答える