generics - 可克隆类型和可复制类型的特征

标签 generics rust traits

我一直在编写一个相当简单的光栅图像特征系统,但我也想将其扩展为适用于逗号分隔值,并且允许两个像素的特征(这将具有 Copy 特征),以及 String (没有)。

但是,两者的重载会导致冲突。那么,如何编写一个同时接受可复制类型和可克隆类型的特征呢?

目前的工作定义如下所示

impl<T:Grid2d,V:Copy> drawable for Line2d{
   fn stroke(&self,out:&mut T);
}

这对于基本上是整数的像素来说效果很好。

最佳答案

CopyClone 的子特征(即所有 Copy 类型也是 Clone),因此您可以拥有一个绑定(bind)在 Clone 上的 impl并且它还将接受所有 Copy 类型。

impl<T: Grid2d, V: Clone> Drawable for Line2d {
   fn stroke(&self, out: &mut T);
}

您必须显式调用 .clone() 才能获取值的副本,但对于 Copy 类型,此 .clone() 调用应该非常便宜(并且在发布版本中,它可能是内联的)。

关于generics - 可克隆类型和可复制类型的特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33312455/

相关文章:

kotlin - 如何在 Kotlinx 序列化中序列化 "Any"类型?

rust - 使用未声明的箱子或模块, "use crate_name::schema::posts"并不总是有效

rust - Rust 在哪里存储所有这些字节?

rust - 使用装箱特征对象时,Rust 的生命周期规则是什么?

php - 父类中 Trait 的别名方法

generics - 如何初始化常量泛型数组?

java - 如何以通用方式访问 Java 构造函数?

javascript - 有没有办法在泛型 (<T>) 函数/类 (Typescript) 中获取泛型类型的名称?

rust - 为类型参数传递 Rust 生命周期

rust - 为什么 impl trait 不能用于返回多个/条件类型?