別の型をラップする構造体を作成したいのですが、特定の特性を実装する値の所有バージョンと借用バージョンの両方を取ることができます。
たとえば、私が特性を持っているとしましょう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 を実装する値への参照を作成します。しかし、これはあなたがそれを行うことになっている方法ですか?