类型“A”没有实现特征“A”

2024-05-10

我正在尝试使用一个具有以闭包作为参数的函数的特征,然后在特征对象上使用它。

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 is rustc 1.0.0-beta.3 (5241bf9c3 2015-04-25) (built 2015-04-25).


问题是这个方法f不是对象安全的,因为它是通用的,因此不能在特征对象上调用它。您将不得不强制其用户通过盒装关闭:

trait A {
    fn f(&self, p: Box<Fn() -> ()>);
}

我想知道为什么 Rust 允许Box<A>首先,我预计那里会出现错误。这个特定的错误确实具有误导性。我会就此提交一个错误。

或者,您可以放弃特征对象,转而使用常规有界泛型,尽管这并不总是可能的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

类型“A”没有实现特征“A” 的相关文章

随机推荐