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

标签 generics vector rust slice lifetime

我正在尝试在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/

    相关文章:

    rust - 如何使用 Rust 编译/检查目录中的所有文件?

    java - Java中限制泛型二叉搜索树的类型参数的混淆解释

    java - 自定义泛型解释

    scala - Scala 类定义中 protected 关键字的含义是什么?

    vector - 通过距离单位而不是 THREE.js 中的因子对 2 Vector3 进行线性插值

    multithreading - 如何在线程之间可变地共享 i32?

    c# - 遍历C#中的任意字典树结构

    c++ - 在 vector 中的派生类上调用重载的 << 运算符

    c++ - 在 C 程序中创建我自己的 std::vector

    rust - 如何从 String.split().collect() 返回数据?