E0120

未匹配的标注

在 trait 上实现 Drop,这是不被允许的:只有结构体和枚举体可以实现 Drop 。

错误代码示例:


trait MyTrait {}

impl Drop for MyTrait {
    fn drop(&mut self) {}
}

一个解决办法就是将该 trait 和结构体包装在一起,并在那之上实现 Drop :


trait MyTrait {}
struct MyWrapper<T: MyTrait> { foo: T }

impl <T: MyTrait> Drop for MyWrapper<T> {
    fn drop(&mut self) {}
}

或者,包装 trait object ,需要一些东西:


trait MyTrait {}

//或者 Box<MyTrait> ,如果你想要一个自己的 trait object
struct MyWrapper<'a> { foo: &'a MyTrait }

impl <'a> Drop for MyWrapper<'a> {
    fn drop(&mut self) {}
}

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/rust-rcei-2020/...

译文地址:https://learnku.com/docs/rust-rcei-2020/...

上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~