我写了一个像这样的库:
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...
Run Code Online (Sandbox Code Playgroud)
请注意,像这样的东西<A: AppleTrait, B: BananaTrait, C: CarrotTrait>
总是聚在一起,并且出现了很多次。所以我想消除这样的负担。
因此,我希望我可以做这样的事情:
define_the_trait_alias ABCTrait = (A: AppleTrait, B: BananaTrait, C: CarrotTrait); // How to do this?
struct Foo<ABC: ABCTrait> {...}
impl<ABC: ABCTrait> Foo<ABC> {...}
Run Code Online (Sandbox Code Playgroud)
谢谢!
也许您可以使用关联类型而不是泛型。例如:
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> {}
Run Code Online (Sandbox Code Playgroud)
在定义 trait 的具体实现时,你可以选择哪个具体类型实现了 trait 请求的关联类型:
impl AbcTrait for Salad {
type Apple = GrannySmith;
type Banana = Cavendish;
type Carrot = LunarWhite;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
52 次 |
最近记录: |