将所有其余结构成员设置为其默认值

问题描述 投票:2回答:1

假设有这样的结构B

struct A {
    /* ... */
}

struct B {
    a: A,
    b: u32,
    c: i8,
    /* ... */
    z: usize
}

A没有Default实现,也没有有意义的默认值。假设b..z全部需要初始化为默认值(在这种情况下为0),并且A初始化为某个运行时值。它可能看起来像这样:

let b = B {
    a: some_a(), b: 0, c: 0, /* ... */ z: 0,
};

显然,这不理想。更糟糕的是,如果将aa添加到该结构中,则需要在初始化程序中添加另一个成员。使用..Default::default()无效,因为B没有实现Default,因为默认情况下,任何A都太昂贵了,以至于计算起来都无法简单地丢弃。此外,无论如何,我在Default实现中都需要一个非常长的结构初始化程序。

是否有办法在不写出所有成员名称的情况下将其余结构成员设置为其默认值(以便将b设置为默认值u32

编辑:最好,添加新成员时,结构初始化程序需要进行最小的更改。这意味着这不理想:

let b = B {
    a: some_a(),
    b: Default::default(),
    /* ... */
    z: Default::default(),
};
struct rust default
1个回答
0
投票

如果您有大型结构,则可以通过派生构建器来简化生活。有几个板条箱可以执行此操作,例如derive_builder

使用该板条箱,您可以执行以下操作:

derive_builder
© www.soinside.com 2019 - 2024. All rights reserved.