Я пытаюсь создать структуру в Rust, которая сама по себе является общей для других общих структур. Это довольно запутанные и надеюсь, этот пример будет делает вещи яснее:Создайте структуру, которая является общей для другой общей структуры.
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);
}
Я хотел бы быть в состоянии создать Foo
объект, вызвав new
либо Rc<i32>
объектов или Arc<i32>
объектов в зависимости от того, нужно ли нить безопасности или нет. Я получаю следующую ошибку, когда я пытаюсь это сделать: error[E0109]: type parameters are not allowed on this type
, поскольку компилятор жалуется на i32
в val: T<i32>,
. Возможно ли это в Rust? Если да, могу ли я безопасно вызывать методы на i32
, предполагая, что он автоматически разыгрывает его?
В отличие от некоторых других языков, к сожалению, Rust не имеет более высоких типов, поэтому параметры типа должны быть конкретными. Однако в этом случае я согласен с @Shepmaster, что вам это не нужно. –