Rust 一次为多个结构实现一个trait

Rust 一次为多个结构实现一个trait,rust,Rust,我有一个traitFooTrait,它有很多功能。我还拥有structsFooStruct和BarStruct,并希望使用完全相同的方法为这两个结构实现FooTrait 是否有一种方法可以同时为FooStruct和BarStruct实现FooTrait?我想象了如下情况: impl FooTrait for FooStruct + BarStruct { // implement methods here } 不,如果没有宏之类的元编程,就无法同时为多个结构实现一个特性 我甚至可以说也

我有一个trait
FooTrait
,它有很多功能。我还拥有structs
FooStruct
BarStruct
,并希望使用完全相同的方法为这两个结构实现
FooTrait

是否有一种方法可以同时为
FooStruct
BarStruct
实现
FooTrait
?我想象了如下情况:

impl FooTrait for FooStruct + BarStruct {
    // implement methods here
}

不,如果没有宏之类的元编程,就无法同时为多个结构实现一个特性

我甚至可以说也没有理由这么做。如果您实际上有“完全相同的方法”,那么您应该将公共成员变量提取到不同的结构中,并为该结构实现特征(如果您甚至还需要该特征)。然后可以将新结构添加为原始结构的成员

如果你有

struct Dog {
    hunger: u8,
    wagging: bool,
}

struct Cat {
    hunger: u8,
    meowing: bool,
}

trait Hungry {
    fn is_hungry(&self) -> bool;
}
你本来可以的

struct Dog {
    hunger: Hunger,
    wagging: bool,
}

struct Cat {
    hunger: Hunger,
    meowing: bool,
}

struct Hunger {
    level: u8,
}

impl Hunger {
    fn is_hungry(&self) -> bool {
        self.level > 100
    }
}
如果你出于其他原因需要这种特质,你可以将其委派给他人:

trait Hungry {
    fn is_hungry(&self) -> bool;
}

impl Hungry for Hunger {
    fn is_hungry(&self) -> bool {
        self.level > 100
    }
}

impl Hungry for Dog {
    fn is_hungry(&self) -> bool { self.hunger.is_hungry() }
}

impl Hungry for Cat {
    fn is_hungry(&self) -> bool { self.hunger.is_hungry() }
}

最后两个实现仍然是相同的,但重复的数量很少。即便如此,我仍然希望在语法层面引入一种委托形式。

FooStruct和BarStruct之间有什么区别?通常,不同的结构需要不同的实现。通常我使用marcos来实现这一点。@Shepmaster我一直在寻找一种方法来实现这一点,时间最长!非常感谢。