私は、異なる特性オブジェクトへの変換を管理する特性を持っています。形質オブジェクトを別の形質オブジェクトにキャストする形質を自動実装することは可能ですか?
trait Foo {
fn as_boo(&mut self) -> Option<&mut Boo> {
None
}
fn as_gee(&mut self) -> Option<&mut Gee> {
None
}
}
が、私は今、自動的に構造体がBoo
/Gee
実装した場合には、これにこの実装を変更したい定型コードの量を減らすために(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
を2回実装することができないため、この方法では動作しません。これは私が知る限り錆には対応していません。
// 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