Rust 如何将多个特征组合为一个;特征元组;?

Rust 如何将多个特征组合为一个;特征元组;?,rust,traits,Rust,Traits,我写了一个lib,比如: struct Foo<A: AppleTrait, B: BananaTrait, C: CarrotTrait> {...} impl<A: AppleTrait, B: BananaTrait, C: CarrotTrait> Foo<A,B,C> {...} struct Bar<A: AppleTrait, B: BananaTrait, C: CarrotTrait> {...} impl<A: Ap

我写了一个lib,比如:

struct Foo<A: AppleTrait, B: BananaTrait, C: CarrotTrait> {...}

impl<A: AppleTrait, B: BananaTrait, C: CarrotTrait> Foo<A,B,C> {...}

struct Bar<A: AppleTrait, B: BananaTrait, C: CarrotTrait> {...}

impl<A: AppleTrait, B: BananaTrait, C: CarrotTrait> Bar<A,B,C> {...}

... and many more...
struct Foo{…}
impl Foo{…}
结构条{…}
impl Bar{…}
... 还有更多。。。
注意,像
这样的东西总是一起出现,并且出现了很多次。所以我想消除这样的负担

因此,我希望我能做如下事情:

define_the_trait_alias ABCTrait = (A: AppleTrait, B: BananaTrait, C: CarrotTrait); // How to do this?

struct Foo<ABC: ABCTrait> {...}

impl<ABC: ABCTrait> Foo<ABC> {...}
定义特征别名ABCTrait=(A:AppleTrait,B:BananaTrait,C:carrottracit);//如何做到这一点?
结构Foo{…}
impl Foo{…}

谢谢

您可以创建一个超级特征,将
a
B
C
作为关联类型。 然后为
(A,B,C)
实现该特性,并在需要指定类型时使用该特性,例如,
某些函数采用类型参数::()
。 要访问
A
B
C
,请使用关联的类型:

trait SuperTrait{
A型:AppleTrait;
B型:巴纳塔利特;
C型:胡萝卜性状;
}
(A,B,C)的impl超性状
{
A型=A型;
B型=B型;
C型=C型;
}
structfoo(std::marker::PhantomData);
impl-Foo{
///返回A的示例函数
fn返回\u a(&self)->D::a{
待办事项!()
}
}
也许您可以使用关联类型而不是泛型。例如:

trait AbcTrait {
    type Apple: AppleTrait;
    type Banana: BananaTrait;
    type Carrot: CarrotTrait;
}

struct Foo<Abc: AbcTrait> {
    abc: Abc,
}
impl<Abc: AbcTrait> Foo<Abc> {}

struct Bar<Abc: AbcTrait> {
    abc: Abc,
}
impl<Abc: AbcTrait> Bar<Abc> {}

只要在不需要边界的地方省略边界,就可以消除大量冗余。请参阅(特别是我对@trentcl的回答)@trentcl谢谢!但即使省略了,它仍然有点长/非常好,谢谢!也很好,谢谢!
impl AbcTrait for Salad {
    type Apple = GrannySmith;
    type Banana = Cavendish;
    type Carrot = LunarWhite;
}