Ich habe eine nicht generische Struktur, die ein generisches Merkmal implementiert. Wenn ich eine Funktion auf der Struktur aufrufen, erhalte ich folgende Fehlermeldung:Aufruf einer spezifischen Merkmalsimplementierung für eine nicht generische Struktur
error[E0282]: unable to infer enough type information about `_`
--> src/main.rs:35:18
|
35 | cpu.debugger.attach();
| ^^^^^^ cannot infer type for `_`
|
= note: type annotations or generic parameter binding required
Ich habe versucht Typenannotationen Hinzufügen und generische Parameterbindungen, aber ich bin offensichtlich etwas falsch zu machen; Ich kann es immer noch nicht kompilieren. Ich habe ähnlichen Code an anderer Stelle mit einer generischen Struktur, die funktioniert, vermutlich weil die generischen Grenzen, die von der Struktur und der Eigenschaft impl geteilt werden, dem Compiler ermöglichen, die tatsächliche Methodenimplementierung zum Aufruf zu bestimmen.
Der beste Weg, um das Problem zu veranschaulichen, ist mit einem reduzierten Beispiel:
struct Cpu<M: Memory, D: Debugger<M>> {
mem: M,
debugger: D,
}
impl<M: Memory, D: Debugger<M>> Cpu<M, D> {
fn new(mem: M, debugger: D) -> Self {
Cpu {
mem: mem,
debugger: debugger,
}
}
}
trait Memory {}
struct SimpleMemory;
impl Memory for SimpleMemory {}
trait Debugger<M: Memory> {
fn attach(&mut self) {}
fn step(mem: &M) {}
}
struct NoOpDebugger;
impl<M: Memory> Debugger<M> for NoOpDebugger {}
fn main() {
let mut cpu = Cpu::new(SimpleMemory, NoOpDebugger);
cpu.debugger.attach(); // <-- cannot infer type for `_`
}
Bitte der Armen Titel entschuldigen, aber es ist der beste Weg, ich weiß, wie das Problem zu beschreiben.