我有一个特征可以管理到不同特征对象的转换。特征看起来像这样:(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
两次,因此它不能以这种方式工作,据我所知,Rust 不支持这种方式。
// 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
但我找不到对它们的任何深入解释,所以我现在有点卡住了。