当前位置: 首页 > 知识库问答 >
问题:

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

司易安
2023-03-14

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

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

如果我使用的是泛型而不是关联类型,我将能够告诉Rust < code > MyAssoc 在traits A和< code>B之间是相同的:

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

我如何对关联的类型做同样的事情?

共有1个答案

叶鹭洋
2023-03-14

可以通过< code>Self引用实现类型,由于< code>B: A,< code>Self::MyAssoc已经存在。

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

这禁止将 B 用于 T {},当

 类似资料:
  • 我有一个trait从另一个trait继承。有一个关联的类型。约束使得必须实现。 然而,当我定义一个泛型函数时,需要泛型类型来实现, 抱怨 ,除非我明确约束 : 我不明白为什么我需要这样做。我希望能够编写。推荐的方法是什么?

  • 我有这种类型: 我想实现并返回对trait对象的引用。这是我的第一次尝试(游乐场): 这不起作用并导致以下错误: 我想我知道为什么会发生这种情况:相当于,因为每个trait对象都有一个默认为的生命周期。 现在我可以将绑定到参数的,但我认为这是过度约束的。在不使用关联类型时,我可以轻松实现这种方法: 不需要绑定,因为现在签名deugars到: 这是有道理的:trait对象必须至少生存。(操场上有所有

  • 我正在Rust中编写一个带有控制台提示界面的进程内存扫描器。 我需要扫描仪类型,如winapi扫描仪或ring0驱动程序扫描仪,所以我试图实现多态性。 目前我有以下结构: 将来,除了 之外,我还会有更多扫描仪类型,因此,如果我理解正确,我应该使用特征引用 (

  • 这个问题是在泛型关联类型在Rust中可用之前提出的,尽管它们是被提出和开发的。 我的理解是,特征泛型和关联类型在它们可以绑定到结构的类型数量上有所不同。 关联类型仅绑定1个类型: 泛型关联类型是这两种类型的混合。它们绑定到一个类型,正好有一个关联的生成器,而生成器又可以关联任何数量的类型。那么前面示例中的和这个泛型关联类型有什么区别呢?

  • 我的一个朋友在Java API中发现了这条新闻(https://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html), 通过阅读以下文章https://docs.oracle.com/javase/tutorial/java/generics/genTypes.html我可以理解前面提到的这一行在语法上意味着什么,但从给出的示例中,我无法找出

  • 我希望有一个类型特征,对于任何在使用前不需要内存初始化的类型返回true,并且其复制构造函数可以作为memcpy实现。 我想让它回到真实 < li >整数类型(char、short int、int、long int等) < li >浮点数类型(float,double) < li>il::array (il::array是我自己对std::array的实现)for T是int、double、il: