我有一個管理轉換爲不同特質對象的特質。 的特點如下:(Boo
和Gee
都是不同的性狀)是否可以自動實現將特質對象轉換爲另一個特徵對象的特徵?
trait Foo {
fn as_boo(&mut self) -> Option<&mut Boo> {
None
}
fn as_gee(&mut self) -> Option<&mut Gee> {
None
}
}
爲了減少我現在要自動更改此實現這情況下,結構實現Boo
/Gee
的樣板代碼量:
#[derive(Boo)]
struct W {}
impl Foo for W {
fn as_boo(&mut self) -> Option<&mut Boo> {
Some(self)
}
}
我能做到這一點,如果只有一個其他特質我有使用泛型轉換爲:
impl<T: Boo> Foo for T {
fn as_boo(&mut self) -> Option<&mut Boo> {
Some(self)
}
}
但是,如果我也想自動執行Foo
爲Gee
它不會這樣工作,因爲我無法實現Foo
兩次,這是不支持生鏽,據我所知。
// This does not compile because Foo might get implemented twice.
impl<T: Boo> Foo for T {
fn as_boo(&mut self) -> Option<&mut Boo> {
Some(self)
}
}
impl<T: Gee> Foo for T {
fn as_gee(&mut self) -> Option<&mut Gee> {
Some(self)
}
}
可能可以實現這一目標使用Procedural Macros
,但我找不到任何在他們深入的解釋,所以我有種現在卡住。
據我所知,程序宏不能訪問類型信息,所以你將無法決定類型是否需要重寫默認方法。 – red75prime