我一直在编写一个相当简单的光栅图像特征系统,但我也想将其扩展为适用于逗号分隔值,并且允许两个像素的特征(这将具有 Copy
特征),以及 String
(没有)。
但是,两者的重载会导致冲突。那么,如何编写一个同时接受可复制类型和可克隆类型的特征呢?
目前的工作定义如下所示
impl<T:Grid2d,V:Copy> drawable for Line2d{
fn stroke(&self,out:&mut T);
}
这对于基本上是整数的像素来说效果很好。
最佳答案
Copy
是 Clone
的子特征(即所有 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/