我想创建自己的vector struct,以便可以附加其他方法。
pub struct MyStructVec(pub Vec<MyStruct>);
Run Code Online (Sandbox Code Playgroud)
完成此操作后,将如何创建此向量的新实例?
MyStructVec::new()无法识别。现有的矢量创建方法将如何与这种类型一起使用?(new,with_capacity...等)
一个新类型“隐藏”其内部。您无法透明地进入内部。要创建的新对象MyStructVec,您需要调用内部类型的构造函数,然后包装它:
MyStructVec(Vec::new())
MyStructVec(Vec::with_capacity(42))
Run Code Online (Sandbox Code Playgroud)
创建了这样的对象之后,您可以通过实现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
}
}
Run Code Online (Sandbox Code Playgroud)
所以我可以附加一些方法
那不是新类型的使用方式。新类型用于类型安全。如果您只想Vec<MyStruct>拥有新方法,请创建一个扩展特征:
trait VecMyStructExt {
fn foo(&self);
}
impl VecMyStructExt for Vec<MyStruct> {
fn foo(&self) { println!("foo"); }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
403 次 |
| 最近记录: |