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

Traits for both Cloneable types and Copyable types

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

但是,两者的重载会导致冲突。那么如何编写一个接受 Copyable 类型和 Cloneable 类型的特征呢?

目前的工作定义看起来像

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

这适用于基本上是整数的像素。

Copy is a subtrait of Clone(即所有 Copy 类型也是 Clone),因此您可以在 Clone 上有一个绑定的 impl 并且它也将接受所有 Copy 类型。

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

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