在特征边界中引用关联类型

Reference associated type in trait bounds

我有一个特质,旨在加强对另一个特质的约束,例如:

trait AssocA {}
trait AssocB: AssocA {}
trait A { type MyAssoc: AssocA; }
trait B: A { type MyAssoc: AssocB; }

如果我使用泛型而不是关联类型,我可以告诉 Rust MyAssoc 在特征 AB 中是相同的:

trait AssocA {}
trait AssocB: AssocA {}
trait A<MyAssoc> where MyAssoc: AssocA {}
trait B<MyAssoc>: A<MyAssoc> where MyAssoc: AssocB { }

如何对关联类型执行相同的操作?

您可以通过 Self 参考实现类型,因为 B: ASelf::MyAssoc 已经存在。

trait B: A where Self::MyAssoc : AssocB {}

<T as A>::MyAssoc 未实现 AssocB 时,这将禁止 impl B for T {}(example)