我想要一个结构体,其成员是一个 Vec,对向量中的类型具有特征约束。现在,这就是我正在尝试的:
pub trait SomeTrait {
fn some_function(&self);
}
pub struct SomeStruct<T: SomeTrait> {
member: Vec<T>
}
impl<T: SomeTrait> SomeStruct<T> {
pub fn new() -> SomeStruct<T> {
SomeStruct {
member: Vec::new()
}
}
}
fn main() {
let mut some_struct = SomeStruct::new();
}
编译器给了我:
error: the trait 'sometrait::SomeTrait' is not implemented for the type '_'
let mut some_struct = SomeStruct::new();
^~~~~~~~~~~
note: required by 'somestruct::SomeStruct<T>::new'
let mut some_struct = SomeStruct::new();
^~~~~~~~~~~
我尝试放置 <T: SomeTrait>
在整个过程中的不同地方,但只是遇到了更奇怪的编译器错误,所以这些尝试一定是大错特错。
预先感谢您的帮助!
最佳答案
问题是您没有向编译器提供足够的信息来弄清楚 T
是什么。这就是 _
的用途:它必须将参数推断为 SomeStruct
。
此外,此示例中的任何位置都没有实现 SomeTrait
的类型。如果您解决了这两个问题,它就会起作用(带有一些警告):
pub trait SomeTrait {
fn some_function(&self);
}
pub struct SomeStruct<T: SomeTrait> {
member: Vec<T>
}
impl<T: SomeTrait> SomeStruct<T> {
pub fn new() -> SomeStruct<T> {
SomeStruct {
member: Vec::new()
}
}
}
impl SomeTrait for i32 {
fn some_function(&self) {}
}
fn main() {
let mut some_struct_a: SomeStruct<i32> = SomeStruct::new();
let mut some_struct_b = SomeStruct::<i32>::new();
}
关于rust - 构造具有特征约束的任何类型的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27518375/