2015-01-24 27 views
7

Kod:Czy istnieje sposób obejścia parametru nieużywanego typu?

trait Trait<T> {} 

struct Struct<U>; 

impl<T, U: Trait<T>> Struct<U> {} 

Błąd:

error[E0207]: the type parameter `T` is not constrained by the impl trait, self type, or predicates 
--> src/main.rs:5:6 
    | 
5 | impl<T, U: Trait<T>> Struct<U> {} 
    | ^unconstrained type parameter 

Wydaje się, że RFC 447 zabrania tego wzoru; Czy jest jakiś sposób obejścia tego? Myślę, że można to rozwiązać, zmieniając T na skojarzony typ, ale to uniemożliwiłoby mi zrobienie multidispatch.

Odpowiedz

7

Parametr typ to niewykorzystane w struktury mogą korzystać PhantomData:

struct Struct<U> { 
    _marker: PhantomData<U>, 
} 

impl<U> Struct<U> { 
    fn example<T>(&self) 
    where 
     U: Trait<T>, 
    { 
     // use `T` and `U` 
    } 
} 
+0

Wow, nie wiedziałem, że to już możliwe użycie gdzie klauzula nad metodami. Rust to naprawdę niesamowity język. –