【发布时间】:2015-01-08 09:09:00
【问题描述】:
能够使用 Deref 从通用容器生成 &TraitType 会相当方便,而不是调用 instance.as_ref()。即:
(*my_container).do_thing();
对比
my_container.as_ref().do_thing();
为此,我尝试在容器类型上实现 Deref,但出现此错误:
<anon>:9:28: 9:29 error: expected a reference to a trait [E0172]
<anon>:9 impl<T> Deref for HasTrait<T + Send> {
发件人:
use std::ops::Deref;
trait Foo {}
struct HasTrait<T> {
data:Box<T>
}
impl<T> Deref for HasTrait<T + Send> {
type Target = T;
fn deref<'a>(&'a self) -> &'a T {
return self.as_ref();
}
}
struct IsFoo;
unsafe impl Send for IsFoo {}
impl Foo for IsFoo {}
fn main() {
let is_foo = IsFoo;
let foo:Box<Foo> = box is_foo as Box<Foo>;
let has_foo = HasTrait { data: foo };
let foo_ref:&Foo = *has_foo;
}
我尝试使用 ?Sized 来增加 T 的边界以允许特征,但它似乎没有帮助?
这样做的正确方法是什么?
【问题讨论】:
标签: rust