我有一个管理转换为不同特质对象的特质。 的特点如下:(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