Ich versuche, Adapter um zwei verschiedene Typen herzustellen, die den gleichen Job machen, und ich kann die beiden Typen nicht umschreiben."keine Methode für Typ T im aktuellen Bereich gefunden" beim Umhüllen eines Typs
X
hat eine Methode, die self
verbraucht, so dass eine polymorphe Laufzeitumgebung nicht anwendbar ist. Die einzige Option ist ein statischer generischer Ansatz.
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));
}
Der Compiler schlägt fehl mit:
error: no method named `uf` found for type `T` in the current scope
a.uf(10)
^~
Wie setzen Sie diese Grenze? – mjwrazor
@mjwrazor Wenn Sie ein wenig nach unten scrollen, sehen Sie, dass [OP ein Merkmal einführt und es als Grenze verwendet] (http://stackoverflow.com/a/38813039/155423). – Shepmaster