Ich versuche, eine Struktur in Rust zu erstellen, die selbst generisch in Bezug auf andere generische Strukturen ist. Das ist ziemlich verwirrend so hoffentlich dieses Beispiel macht die Dinge klarer:Erstellen Sie eine Struktur, die generisch ist über eine andere generische Struktur
use std::ops::Deref;
use std::rc::Rc;
struct Foo<T: Deref> {
val: T<i32>,
other: i32,
}
impl<T> Foo<T> {
pub fn new(&self, val: T<i32>, other: i32) -> Self {
Foo {val: val, other: other}
}
}
fn main() {
let foo = Foo::new(Rc::new(0), 0);
}
Ich möchte in der Lage sein, ein Foo
Objekt zu erstellen, durch den Aufruf new
mit entweder Rc<i32>
Objekten oder Arc<i32>
Objekte je nachdem, ob ich brauchte Fadensicherheit oder nicht. Ich bekomme den folgenden Fehler, wenn ich dies versuche: error[E0109]: type parameters are not allowed on this type
, wie der Compiler über die i32
in val: T<i32>,
beschwert. Ist das in Rust möglich? Wenn ja, kann ich sicher Methoden auf i32
aufrufen, vorausgesetzt, es wird es automatisch dereferenzieren?
Im Gegensatz zu einigen anderen Sprachen hat Rust leider (noch) keine höheren Typen, daher müssen Typ-Parameter konkrete Typen sein. In diesem Fall stimme ich @Shepmaster jedoch zu, dass Sie es nicht benötigen. –