首页 > 解决方案 > 如何为我不拥有的类型的固有方法创建特征?

问题描述

我想实现我自己版本的 Rust 标准库功能,并可以互换使用我的版本和真正的标准库版本。

如果标准库功能是一个特征,这将很容易。但是,标准库功能(在本例中std::sync::Condvar为 )实现为

pub struct Condvar {...}

impl Condvar {...}

我试着做

impl Condvar for MyCondvar {...}

但出现错误(“错误[E0404]:预期特征,找到结构Condvar”)

我该怎么做?我也试过

pub trait CondvarTrait { // copy entire interface of Condvar }

impl CondvarTrait for Condvar {
  // copy entire interface of Condvar again,
  // implementing foo(&self, ...) by calling self.foo(...)
}

impl CondvarTrait for MyCondvar { // my own implementation }

可以编译,但非常冗长。有没有更好的办法?

标签: rust

解决方案


您需要复制该类型的整个接口并通过调用固有方法重新实现它。

也可以看看:

有没有更好的办法?

与您描述要求的方式不同。

话虽如此,您并没有引入任何适合您的领域的抽象。在许多情况下,您不想要底层类型的全部功能,而是想要进行一些更高级别的抽象。如果您将该抽象创建为特征,那么您可以为任何有用的类型实现新特征。


推荐阅读