我正在尝试使用静态调度为板条箱 B 中的特性实现板条箱 A 的特性。我正在包装外来特征,但impl<T>在线路上遇到了问题:
extern crate a;
extern crate b;
pub trait C: a::A {}
impl<T: C> b::B for T {}
Run Code Online (Sandbox Code Playgroud)
我正在寻找的最终结果是使用静态调度b::B为 trait 的实现者实现C。
我收到以下错误:
extern crate a;
extern crate b;
pub trait C: a::A {}
impl<T: C> b::B for T {}
Run Code Online (Sandbox Code Playgroud)
我可以通过使用动态调度来解决这个问题impl b::B for dyn C——但想通过静态调度来实现这一点。
我已经试过了:
Vec,而是我自己的类型我通常做的是将外部类型包装在 a 中struct(而不是引入trait从外部类型派生的新类型):
extern crate a;
extern crate b;
pub struct C<T: a::A> {
pub t: T,
}
impl<T: a::A> b::B for C<T> {}
Run Code Online (Sandbox Code Playgroud)
然而,有时需要一些样板在C“正常”类型之间进行转换。
这有时称为“NewType 模式”(如https://github.com/Ixrec/rust-orphan-rules中所示)。
| 归档时间: |
|
| 查看次数: |
613 次 |
| 最近记录: |