我正在构建一个类似于copycat的体系结构的Rust的Raft共识算法中间件。我为开发人员编写了一个宏来定义命令方案。该宏为用户定义的命令生成dispatch
函数的特性A
,这需要开发人员为其行为实现结构以及与此主题无关的编码器/解码器。特质实现其父特征的任何替代方法?
特征对象注册一个Server
对象使其工作。因为特征A
是动态生成的,所以我必须定义另一个特征B
作为A
的父特征。 Server
与B
一起使用来调用A
中定义的dispatch
函数。
我尝试了不同的组合,但没有一个可以工作。
trait B {
fn dispatch(&mut self, fn_id: u64) -> Vec<u8>;
}
// macro generated trait
trait A: B {
fn a(&self) -> Vec<u8>;
fn b(&self) -> Vec<u8>;
fn dispatch(&mut self, fn_id: u64) -> Vec<u8> {
match fn_id {
1 => a(),
2 => b(),
_ => {}
}
}
}
不幸的是,在A
的dispatch
功能不能B
实现dispatch
。当我实现A
的结构时,编译器仍然要求为B
实施dispatch
。
我也试图在特质B
移动dispatch
另一个特点为母体的特质对B
,但性状不能实施A
。我也回顾了https://github.com/rust-lang/rfcs/issues/1024。这个问题似乎是开放的,但已被放弃。有没有其他方法可以使这种模式起作用?
你的问题不是很清楚。为什么不在实现'B'的同时扩展创建特征'A'的宏呢? – Shepmaster
@Shepmaster,因为会有更多像宏生成的特征,服务器需要一个共同的特性来调用调度 – Shisoft