在我当前的项目中,我试图编写一些可以用这个最小示例表示的东西:
#[derive(Default)]
struct A<T> {
field: std::marker::PhantomData<T>
}
struct B;
fn main() {
let a = A::<B> {
..Default::default()
};
}
Run Code Online (Sandbox Code Playgroud)
但是,这段代码无法编译。
error[E0277]: the trait bound `B: std::default::Default` is not satisfied
--> src/main.rs:10:11
|
10 | ..Default::default()
| ^^^^^^^^^^^^^^^^ the trait `std::default::Default` is not implemented for `B`
|
= note: required because of the requirements on the impl of `std::default::Default` for `A<B>`
= note: required by `std::default::Default::default`
error: aborting due to previous error
Run Code Online (Sandbox Code Playgroud)
这对我来说有点奇怪,因为它Default是 forA和 for派生的PhantomData<T>,那么如果它没有实现 for 又有什么关系呢B?
查看来自 @mcarton 的链接,因为手动实现默认特征确实可以编译。
//#[derive(Default)]
struct A<T> {
field: std::marker::PhantomData<T>
}
struct B;
impl<T> Default for A<T> {
fn default() -> Self {
Self { field: Default::default() }
}
}
fn main() {
let a = A::<B> {
..Default::default()
};
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7061 次 |
| 最近记录: |