【发布时间】:2017-03-15 01:39:23
【问题描述】:
我正在尝试在 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);
}
我希望能够通过使用Rc<i32> 对象或Arc<i32> 对象调用new 来创建Foo 对象,具体取决于我是否需要线程安全。但是,当我尝试此操作时出现以下错误:error[E0109]: type parameters are not allowed on this type,因为编译器抱怨val: T<i32>, 中的i32。这在 Rust 中可能吗?如果是这样,我可以安全地调用 i32 上的方法,假设它会自动取消引用它吗?
【问题讨论】:
-
与其他一些语言不同,不幸的是,Rust(还)没有更高种类的类型,所以类型参数必须是具体类型。但是在这种情况下,我同意@Shepmaster 你不需要它。
标签: generics struct rust dereference