我正在尝试使用一个具有以闭包为参数的函数的特质,并将其用于特质对象。
trait A {
fn f<P>(&self, p: P) where P: Fn() -> ();
}
struct B {
a: Box<A>
}
impl B {
fn c(&self) {
self.a.f(|| {});
}
}
这段代码会产生以下错误:
the trait `A` is not implemented for the type `A` [E0277]
rustc
的版本是rustc 1.0.0-beta.3 (5241bf9c3 2015-04-25) (built 2015-04-25)
。
Box<TraitA>
不是合法的吗? - Daniel FathBox<A>
几乎没什么用,因为A
不是对象安全的——你实际上不能做任何事情。 - Chris Morgan&
)而不是Box
。即fn f(&self, p: &Fn() -> ());
。显然,尽管没有使用Box
,但仍称其为“boxed closure”。在这种情况下,“boxed”只是指它是指针类型。 - Cam Jackson