2016-10-28 20 views
5

Podczas korzystania z nieprzetworzonych punktów w strukturze, Rust nie pozwala uzyskać wartości domyślnej.Jak zaimplementować `Default` dla surowego wskaźnika?

np

#[derive(Default)] 
struct Foo { 
    bar: *mut Foo, 
    baz: usize, 
} 

Raporty

error[E0277]: the trait bound `*mut Foo: std::default::Default` is not satisfied 

próbowałem tego, ale to nie działa:

impl Default for *mut Foo { 
    fn default() -> *mut Foo { 
     ptr::null_mut() 
    } 
} 

To daje błąd:

impl doesn't use types inside crate 

Czy istnieje sposób zadeklarowania Default dla wskaźnika surowego?

W przeciwnym razie będę musiał napisać jawne funkcje default dla każdego struct, który zawiera surowy wskaźnik, OK w tym przykładzie, ale dla większych struktur może być uciążliwy, więc chciałbym móc tego uniknąć w niektórych przypadki.

+3

Teraz zastanawiam się, czy ktoś aktywnie zdecydował, że surowe wskaźniki nie powinny IMPL 'default' lub jeśli impl właśnie zapomniał ... –

+0

mam stworzyć problem: https://github.com/rust-lang/rust/issues/43722 – AndreyT

Odpowiedz

6

Is there a way to declare Default for the raw pointer?

nr, obecnie nie ma. Ta cecha lub typ musi być zdefiniowany w skrzyni, w której zapisana jest cecha-impl (tak zwane "zasady osierocone"). Nie trzeba ręcznie wdrażać dla wszystkich typów zawierających wskaźnik Możesz utworzyć nowy typ, który otoczy surowy wskaźnik i wdroży Default. Następnie możesz po prostu użyć tego nowego typu we wszystkich swoich strukturach i po prostu wyprowadzić Default.

struct ZeroedMutPtr<T>(pub *mut T); 

impl<T> Default for ZeroedMutPtr<T> { ... } 
Powiązane problemy