Rust 一次为多个结构实现一个trait
我有一个traitRust 一次为多个结构实现一个trait,rust,Rust,我有一个traitFooTrait,它有很多功能。我还拥有structsFooStruct和BarStruct,并希望使用完全相同的方法为这两个结构实现FooTrait 是否有一种方法可以同时为FooStruct和BarStruct实现FooTrait?我想象了如下情况: impl FooTrait for FooStruct + BarStruct { // implement methods here } 不,如果没有宏之类的元编程,就无法同时为多个结构实现一个特性 我甚至可以说也
FooTrait
,它有很多功能。我还拥有structsFooStruct
和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我一直在寻找一种方法来实现这一点,时间最长!非常感谢。