newtypeは内部を「隠す」。インテリアへの透明なアクセスは得られません。 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
}
}
ので、私は余分な方法
を添付することができます
これは、newtypesが使用される方法ではありません。新しい型は型の安全に使用されます。あなたが望むすべてがすべてVec<MyStruct>
は、新しいメソッドを持っているということである、拡張形質を作成する場合:
trait VecMyStructExt {
fn foo(&self);
}
impl VecMyStructExt for Vec<MyStruct> {
fn foo(&self) { println!("foo"); }
}