2015-02-07 57 views
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 {…} 
+0

作爲一種解決方法,您可以定義一個私有宏來生成兩個impls,或者您可以將一個變體的實現轉換爲另一個具有強制轉換的實現:* const T'實現,然後將'* mut T'的impl定義爲'(self as * const T).method()'或類似的東西。 – delnan 2015-02-07 22:44:13

+0

鑄造可能是我見過最多的解決方案;我想我甚至已經看到人們只有在明確需要的時候纔會保存'* const T'指針並將其轉換爲'* mut T'。更一般地說,人們希望能夠*返回參數化的可變性,以及改變引用'&T'的可變性'&mut T'。在這些情況下,我會非常謹慎地施放或轉化。 – Shepmaster 2015-02-07 22:50:46

回答

5

可以易變性在性狀的泛型參數?

號^ _^

下面是關於此事(ForumReddit)一些詳細的討論。

我認爲一般人都認爲目前的狀態並不理想,但目前它也不是非常有限。關於它將如何實施以及各種方法的合理性存在擔憂。有些人懷疑高等金屬類型(HKTs)是否可以解決問題,如果它們被添加到Rust的話。