在使用 tinyvec 时,即使 ArrayVec 和 Item 都实现了 Copy,我仍然收到“字段未实现`Copy`”的错误信息。

4

有人知道这里发生了什么吗?为什么我会得到

此字段未实现Copy

use tinyvec::ArrayVec;

#[derive(Copy, Clone)]
struct Item {
    num: i32
}

#[derive(Copy, Clone)]
struct Test {
    nums: ArrayVec<[Item; 20]>
}

fn main() {

    let mut x = Test {
        nums: ArrayVec::new()
    };

}
1个回答

11

ArrayVec实现了Copy,但有以下限制:

impl<A> Copy for ArrayVec<A> where
    A: Array + Copy,
    A::Item: Copy,
{}

在这种情况下,A 是一个 [Item; 20],因此它实现了 Copy。然而,[Item; 20] 不满足 实现 Array 的限制条件。
impl<T: Default> Array for [T; 20] {
  // ^^^^^^^^^^

要使[Item; 20]成为一个ArrayItem需要实现Default

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接