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