如何为我不拥有的类型的固有方法创建特征?

时间:2019-07-24 03:53:46

标签: rust

我想实现自己的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 }

可以编译,但是超级冗长。有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

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

另请参阅:

  

有更好的方法吗?

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

话虽如此,您不会引入任何适合您的域的抽象。在许多情况下,您不希望基础类型具有完整的功能,而是想要进行更高级别的抽象。如果将 that 抽象创建为特征,则可以为任何有用的类型实现新的特征。