我想实现自己的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 }
可以编译,但是超级冗长。有更好的方法吗?
答案 0 :(得分:3)
您需要复制该类型的整个接口,然后通过调用固有方法来重新实现它。
另请参阅:
有更好的方法吗?
与您描述需求的方式不同。
话虽如此,您不会引入任何适合您的域的抽象。在许多情况下,您不希望基础类型具有完整的功能,而是想要进行更高级别的抽象。如果将 that 抽象创建为特征,则可以为任何有用的类型实现新的特征。