我想创建自己的向量 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/