我正在構建一個類似於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