我正在嘗試使兩個不同類型的適配器執行相同的工作,但我無法重寫這兩種類型。「在當前範圍中找不到類型T的方法」當包裝類型時
X
有一個消耗self
的方法,所以運行時多態包裝器不適用。唯一的選擇是靜態通用方法。
struct X {}
impl X {
fn f(self, n: i32) {
println!("n = {}", n);
}
fn new() -> X {
X {}
}
}
struct AdapterX {
x: X
}
impl AdapterX {
fn uf(self, n: i32) {
self.x.f(n)
}
fn new(x: X) -> AdapterX {
AdapterX { x: x }
}
}
fn useAdapted<T>(a: T) {
a.uf(10)
}
fn main() {
let x = X::new();
useAdapted::<AdapterX>(AdapterX::new(x));
}
編譯器失敗:
error: no method named `uf` found for type `T` in the current scope
a.uf(10)
^~
你怎麼設定這個界限? – mjwrazor
@mjwrazor如果你向下滾動一下,你會看到[OP引入了一個特徵並將其用作綁定](http://stackoverflow.com/a/38813039/155423)。 – Shepmaster