3
可变性是性状中的一个通用参数吗?我想实现类型的可变和不可变变体的特性,而不必复制&粘贴impl
块。如何实现任何可变性的特质?
trait Foo<T> {…} impl<T> Foo for *const T {…} impl<T> Foo for *mut T {…same thing again…}
一厢情愿的伪代码:
trait Foo<T> {…} impl<T, Mutability> Foo for *Mutability T {…}
作为一种解决方法,您可以定义一个私有宏来生成两个impls,或者您可以将一个变体的实现转换为另一个具有强制转换的实现:* const T'实现,然后将'* mut T'的impl定义为'(self as * const T).method()'或类似的东西。 – delnan 2015-02-07 22:44:13
铸造可能是我见过最多的解决方案;我想我甚至已经看到人们只有在明确需要的时候才会保存'* const T'指针并将其转换为'* mut T'。更一般地说,人们希望能够*返回参数化的可变性,以及改变引用'&T'的可变性'&mut T'。在这些情况下,我会非常谨慎地施放或转化。 – Shepmaster 2015-02-07 22:50:46