Ein newtype "verbirgt" seine Interna. Sie erhalten keinen transparenten Zugang zum Innenraum. Um ein neues Objekt von MyStructVec
zu erstellen, müssen Sie die innere Art Konstruktor aufrufen und dann wickeln:
MyStructVec(Vec::new())
MyStructVec(Vec::with_capacity(42))
Nach der Erstellung eines solchen Objekts, können Sie das Objekt etwas transparent nutzen, indem Deref
und DerefMut
Implementierung für Ihre Typ:
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 kann ich zusätzliche Methoden anhängen
Das ist nicht die Art, wie neue Typen verwendet werden. Newtypes werden für die Typsicherheit verwendet. Wenn alles, was Sie wollen, dass alle Vec<MyStruct>
neue Methoden haben, erstellen Sie eine Erweiterung Merkmal:
trait VecMyStructExt {
fn foo(&self);
}
impl VecMyStructExt for Vec<MyStruct> {
fn foo(&self) { println!("foo"); }
}