我希望创建一个结构体,它能够封装另一个类型,并且可以接受实现了指定 trait 的拥有和借用版本的值。
例如,假设我有一个 trait `Foobar`:
例如,假设我有一个 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 的实现者。但是这是否是你应该这样做的方式呢?
&T
或Box<T>
),那么这是不希望的,?Sized
将移除此限制。 - Veedrac