Rust 如何在结构中使用未使用的类型参数?

Rust 如何在结构中使用未使用的类型参数?,rust,Rust,我正在尝试更新我编写的一些旧代码,这些代码基本上如下所示: trait Foo<T>{} struct Bar<A, B: Foo<A>>{ b: B } 但我觉得这真的很混乱。阅读PhantomData的文档似乎表明这是用来处理不安全代码的,但我在这里没有处理不安全代码。我只希望Bar包含实现Foo的某个类型的实例 这真的是现在处理这种情况的唯一方法,还是我遗漏了什么?根据实际的Foo的情况,您可能可以使用相关类型,如下所示: struct Bar&

我正在尝试更新我编写的一些旧代码,这些代码基本上如下所示:

trait Foo<T>{}

struct Bar<A, B: Foo<A>>{
  b: B
}
但我觉得这真的很混乱。阅读
PhantomData
的文档似乎表明这是用来处理不安全代码的,但我在这里没有处理不安全代码。我只希望
Bar
包含实现
Foo
的某个类型的实例


这真的是现在处理这种情况的唯一方法,还是我遗漏了什么?

根据实际的
Foo
的情况,您可能可以使用相关类型,如下所示:

struct Bar<A>{
  b: Foo<A>
}
trait Foo{ type T; }

struct Bar<B: Foo> {
  b: B,
}
trait Foo{type T;}
结构条{
b:b,
}
否则(如果您确实需要在
Foo
上设置type参数),
PhantomData
确实是一种方法


您并不是唯一一个发现PhantomData的文档混乱的人(请参阅)。因此,过去和现在都明确提到了这个场景(不仅仅是不安全的代码)。

似乎您想要的是以下内容:对于任何类型的
a
B
都必须实现
Foo以获取有关方差的更多信息,而
PhantomData
看起来关联的类型对我有效。我确实看到了关于PhantomData的问题和更新的文档,但仍然认为这很奇怪,但至少我现在可以避免:)我们可能会考虑在将来让它不那么奇怪,但现在,这肯定是一种相当低级的事情。
struct Bar<A, B: Foo<A>> {
  b: B,
  marker: PhantomData<A>
}
trait Foo{ type T; }

struct Bar<B: Foo> {
  b: B,
}
trait Foo<T> { }
trait Foo {
    type T;
}