gpt4 book ai didi

generics - 要求泛型类型实现复制或克隆|来自泛型固定数组的泛型向量

转载 作者:行者123 更新时间:2023-12-03 11:36:34 29 4
gpt4 key购买 nike

我正在尝试在Rust中实现一个自定义数据结构,其行为类似于数学中的Set(支持Union,Intersection,Disjoint比较等)。我希望构造函数(新的关联函数)采用通用类型T的一部分并填充一个类型T的向量。

#[derive(Debug, PartialEq)]
pub struct CustomSet<T> {
elements: Vec<T>
}

impl<T> CustomSet<T> {
pub fn new(input: &[T]) -> Self {
let mut elements = Vec::new();
for elm in input {
elements.push(*elm);
}
CustomSet {
elements
}
}
}
这使编译器非常烦恼,因为 T不一定实现 Copy(或针对此问题的 Clone)。我无法在 Copy上手动实现 CloneT,因为我不知道什么是 T。我不想使用 Vec<&T>,因为我真的不想管理生命周期。我认为解决方案是以某种方式要求 T实现 CloneCopy,这对我来说很合适,但是我也不知道该怎么做。我们欢迎您提供有关此问题的任何建议。

最佳答案

通用impl中的Copy约束:

#[derive(Debug, PartialEq)]
pub struct CustomSet<T> {
elements: Vec<T>
}

impl<T: Copy> CustomSet<T> {
pub fn new(input: &[T]) -> Self {
CustomSet {
elements: input.to_vec()
}
}
}
通用impl中的 Clone约束:
#[derive(Debug, PartialEq)]
pub struct CustomSet<T> {
elements: Vec<T>
}

impl<T: Clone> CustomSet<T> {
pub fn new(input: &[T]) -> Self {
CustomSet {
elements: input.to_vec()
}
}
}
也可以看看:
  • Trait Bound Syntax in the Rust book
  • What's the difference between Copy and Clone?
  • 关于generics - 要求泛型类型实现复制或克隆|来自泛型固定数组的泛型向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65350257/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com