在Rust中重写毯子特性实现
对于我的游戏规则引擎,我有一个叫做在Rust中重写毯子特性实现,rust,Rust,对于我的游戏规则引擎,我有一个叫做Rule的核心特性,它处理游戏回调。有两种类型的规则s:一种基本规则适用于游戏中的任何实体,另一种创建规则仅适用于生物。我目前的代码结构如下: trait基本规则{ fn on_turn_start(&self,owner:&T){} } #[typetag::serde(tag=“type”)] 发布特征创建规则:BaseRule{ fn关于死亡(&自我,所有者:&生物){} } 这很好,但有点烦人,因为您需要为每个实现同时实现规则和创建规则。我试图全面实现
Rule
的核心特性,它处理游戏回调。有两种类型的规则
s:一种基本规则
适用于游戏中的任何实体,另一种创建规则
仅适用于生物。我目前的代码结构如下:
trait基本规则{
fn on_turn_start(&self,owner:&T){}
}
#[typetag::serde(tag=“type”)]
发布特征创建规则:BaseRule{
fn关于死亡(&自我,所有者:&生物){}
}
这很好,但有点烦人,因为您需要为每个实现同时实现规则
和创建规则
。我试图全面实现BaseRule
:
impl R的基本规则{
}
但是,如果我尝试添加BaseRule
特性的新实现,例如通过
为BaseMeedAmageAttack执行BaseRule{
fn开启\u回合\u开始(&自身,所有者:&生物){
//做事
}
}
因为不可能有两个相同特性的实现。是否有一种方法可以为实现CreatureRule
但仍允许覆盖函数默认实现的类型提供BaseRule
的总体默认实现
(如果可能的话,我希望避免在
CreatureRule
上使用泛型类型参数,因为Serde序列化不适用于具有泛型类型的特征。)我认为您必须为每个属性手动实现它,但它只有一行:
impl BaseRule用于。。。{}
自动实现需要一个宏(这会降低代码的可读性),或者impl专门化(and),这目前需要夜间执行 在稳定锈菌中,基本上不是。你要求的是特性专门化。请参阅和。