gpt4 book ai didi

types - 如何在 Rust 中创建包装向量的新实例?

转载 作者:行者123 更新时间:2023-11-29 08:01:39 25 4
gpt4 key购买 nike

我想创建自己的向量 struct,这样我就可以附加额外的方法。

pub struct MyStructVec(pub Vec<MyStruct>);

完成此操作后,如何创建此向量的新实例?

MyStructVec::new() 无法识别。现有的矢量创建方法将如何与这种类型一起使用? (new, with_capacity...等)

最佳答案

新类型“隐藏”了它的内部结构。您无法透明地进入内部。创建 MyStructVec 的新对象,你需要调用内部类型的构造函数然后包装它:

MyStructVec(Vec::new())

MyStructVec(Vec::with_capacity(42))

创建此类对象后,您可以通过实现 Deref 来稍微透明地使用该对象和 DerefMut适合你的类型:

impl std::ops::Deref for MyStructVec {
type Target = Vec<MyStruct>;
fn deref(&self) -> &Vec<MyStruct> {
&self.0
}
}

impl std::ops::DerefMut for MyStructVec {
fn deref_mut(&mut self) -> &mut Vec<MyStruct> {
&mut self.0
}
}

so I can attach extra methods

那不是使用新类型的方式。新类型用于类型安全。如果你想要的只是所有 Vec<MyStruct>有新方法,创建扩展特征:

trait VecMyStructExt {
fn foo(&self);
}
impl VecMyStructExt for Vec<MyStruct> {
fn foo(&self) { println!("foo"); }
}

关于types - 如何在 Rust 中创建包装向量的新实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40925296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com