2016-10-28 68 views
5

在结构中使用原始点时,Rust不允许从默认值派生。如何为原始指针实现`Default`?

如:

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

报告

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

我试过,但它不工作:

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

这给出了一个错误:

impl doesn't use types inside crate 

有没有办法为原始指针声明Default

否则我得写明确default功能包含一个原始指针,确定在这个例子中,但对于更大的结构也可能是乏味的任何struct,所以我希望能够避免它在某些案例。

+3

现在,我想知道,如果有人主动决定,原始指针不应该IMPL'Default'或者如果IMPL只是忘记了... –

+0

我已创建一个问题:https://github.com /防锈琅/防锈/问题/ 43722 – AndreyT

回答

6

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

没有,目前还没有。特征或类型需要在箱子中定义,其中trait-impl被写入(所谓的“孤儿规则”)。

但是,您不需要为包含指针的所有类型手动实现Default。您可以创建一个新类型,它包装一个原始指针并执行Default。然后,您可以在所有结构中使用这种新类型,并简单导出Default

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

impl<T> Default for ZeroedMutPtr<T> { ... }