【问题标题】:Traits for both Cloneable types and Copyable types可克隆类型和可复制类型的特征
【发布时间】:2015-10-24 23:43:01
【问题描述】:

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

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

目前的工作定义看起来像

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

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

【问题讨论】:

    标签: generics rust traits


    【解决方案1】:

    Copy 是Clone 的子特征(即所有Copy 类型也是Clone),所以你可以有一个impl 与Clone 绑定,它也将接受所有@ 987654330@ 类型。

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

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

    【讨论】:

    • 这个.clone() 调用应该非常便宜 — 更具体地说,it is a copy。而且很有可能被内联。
    • 你是对的。只需将可复制要求更改为克隆,它适用于我想要的类型。谢谢
    猜你喜欢
    • 2013-08-23
    • 1970-01-01
    • 2013-06-28
    • 2014-09-01
    • 2020-08-12
    • 2011-09-08
    • 2014-01-09
    • 2013-11-21
    • 2016-09-13
    相关资源
    最近更新 更多