2015-01-24 15 views
7

Kodu:Kullanılmayan bir tür parametresi etrafında çalışmak için herhangi bir yolu var mı?

trait Trait<T> {} 

struct Struct<U>; 

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

Hata:

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 

O RFC 447 bu kalıbı yasaklamaktadır görünüyor; Bu konuda çalışmak için herhangi bir yolu var mı? İlişkili bir türe T değiştirerek çözülebileceğini düşünüyorum, ancak bu benim çoklu aktarım yapmamı engelliyordu.

cevap

7

yapı içinde kullanılmayan var A tipi parametresi PhantomData kullanabilirsiniz:

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

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

Vay, bunu kullanmak zaten mümkün bilmiyordum nerede yöntemleri tümcesi. Rust gerçekten harika bir dil. –

İlgili konular