为本地泛型类型实现外部特征

Kel*_*len 6 rust

我正在尝试使用静态调度为板条箱 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——但想通过静态调度来实现这一点。

我已经试过了:

phi*_*mue 3

我通常做的是将外部类型包装在 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中所示)。