Wie kann ich eine Instanz eines Merkmals von einer Methode zurückgeben?

Ich versuche, eine Funktion zu erstellen, die eine Instanz des @ zurückgibShader Eigenschaft. Hier ist mein drastisch vereinfachter Code:

trait Shader {}

struct MyShader;
impl Shader for MyShader {}

struct GraphicsContext;

impl GraphicsContext {
    fn create_shader(&self) -> Shader {
        let shader = MyShader;
        shader
    }
}

fn main() {}

Ich erhalte jedoch die folgende Fehlermeldung:

error[E0277]: the trait bound `Shader + 'static: std::marker::Sized` is not satisfied
  --> src/main.rs:10:32
   |
10 |     fn create_shader(&self) -> Shader {
   |                                ^^^^^^ `Shader + 'static` does not have a constant size known at compile-time
   |
   = help: the trait `std::marker::Sized` is not implemented for `Shader + 'static`
   = note: the return type of a function must have a statically known size

Dies ist sinnvoll, da der Compiler die Größe des Merkmals nicht kennt, aber ich kann nirgendwo die empfohlene Methode finden, um dies zu beheben. Referenz mit @ zurückgeb& würde meines Wissens nicht funktionieren, da die Referenz die Lebensdauer ihres Erstellers überdauern würde.

Vielleicht muss ich @ verwendBox<T>?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage