我想要一个结构,其成员是一个Vec,在Vector中的类型上有一个Trait Constraint。现在,这就是我想要的:
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>
放在各个地方,但只是遇到更奇怪的编译错误,所以这些尝试必须偏离基础。
提前感谢您的帮助!
答案 0 :(得分:2)
问题是你没有给编译器足够的信息来确定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();
}