2015-02-07 2 views
3

mutability는 형질에서 일반적인 매개 변수가 될 수 있습니까? 나는 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

임시 해결책으로 두 impl을 모두 생성하도록 private 매크로를 정의하거나 캐스트를 사용하여 한 variant의 구현을 다른 것에 전달할 수 있습니다 :'* const T'에 대해 구현 한 다음'* mut T'에 대한 impl을 as '(self as * const T) .method()'또는 이와 비슷한 것. – delnan

+0

캐스팅은 아마도이 경우에 가장 많이 보인 해결책 일 것입니다. 나는 사람들이'const T' 포인터를 유지하고 명시 적으로 필요할 때만'mut T '로 캐스트하는 것을 보았다고 생각한다. 더 일반적으로, 사람들은 mutability에 대해 매개 변수화 된 값을 반환 할 수 있고, 참조의 변경 가능성을 바꿀 수 있기를 원합니다. '& T' <->'& mut T'. 나는 그런 경우에 주조하거나 변용하는 것에 대해 매우 조심 스러울 것이다. – Shepmaster

답변

5

는 특성에서 일반 매개 변수가 될 가변성 수 있습니까?

번호^_^

여기서 문제 (Forum, Reddit)에 대한 몇 가지 세부적인 논의가있다.

나는 사람들이 현재 상태가 이상적이지 않다는 것을 인식하지만, 현재로서는 그다지 제약이 없다고 생각한다. 정확히 어떻게 구현 될 것이며 다양한 접근법의 건전성에 대한 우려가 있습니다. 일부 사람들은 Rust에 추가 된 경우 Higher-Kinded Types (HKT)가 문제를 해결할 수 있을지 궁금해합니다.

관련 문제