我有一个通用结构,并希望提供一个具体的默认实现,它也将允许用户覆盖默认字段的值,但我收到编译错误:
struct MyStruct<A, B, C> {
pub a: A,
pub b: B,
pub c: C,
}
impl<A, B, C> MyStruct<A, B, C>
where
A: Trait1,
B: Trait2,
C: Trait3,
{
pub fn foo() {}
}
trait Trait1 {}
trait Trait2 {}
trait Trait3 {}
Run Code Online (Sandbox Code Playgroud)
我可以MyStruct显式创建以下实例:
struct SomeA();
impl Trait1 for SomeA {}
struct SomeB();
impl Trait2 for SomeB {}
struct SomeC();
impl Trait3 for SomeC {}
let a = SomeA();
let b = SomeB();
let c = SomeC();
let my_struct = MyStruct { a: a, b: b, c: c }; // compiles
Run Code Online (Sandbox Code Playgroud)
现在我想实现Default这也将允许在必要时覆盖具有不同值的特定字段(允许部分默认?)。不确定语法:
impl Default for MyStruct<SomeA, SomeB, SomeC> {
fn default() -> Self {
...
}
}
Run Code Online (Sandbox Code Playgroud)
您可以通过仅实现实现这个Default如果A,B和C所有实施Default:
impl <A, B, C> Default for MyStruct<A, B, C> where A: Default, B: Default, C: Default {
fn default() -> Self {
Self {
a: A::default(),
b: B::default(),
c: C::default(),
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
945 次 |
| 最近记录: |