rust - 构造具有特征约束的任何类型的向量

标签 rust traits

我想要一个结构体,其成员是一个 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/

相关文章:

rust - 我如何指定在 Cargo 工作区的根目录中默认运行哪个 crate `cargo run`?

rust - 更高等级的生命周期和泛型表现不佳

rust - 如何将保存特征对象的结构克隆到 `Fn`

rust - 使用关联类型时不满足特征绑定(bind)

PHPUnit 测试位于特征中的静态函数

rust - Rust:如何将BytesMut转换/读取为文件?

vector - 通过迭代而不是使用 .push() 逐一填充结构体元素的向量

recursion - 在 Rust 中使用递归函数生成树结构时的多个可变借用

struct - 如何克隆存储盒装特征对象的结构?

unit-testing - 如何测试 Rust 中的可选功能?