2017-02-21 21 views
3

我有一個函數f,其中有兩個相同類型的參數,並且函數g需要兩個不同類型的參數,但兩種類型都必須存儲相同的值,因此g可以調用f,其中包含的值參數爲f。我目前實施的是這樣的:如何強制執行兩個相關的特徵類型參數的平等?

fn f<T>(a: T, b: T) {} 

trait A { 
    type A; 
    fn getter(&self) -> Self::A; 
} 

fn g<T: A, U: A>(a: T, b: U) { 
    f(a.getter(), b.getter()) 
} 

我有什麼要添加到的g定義,使其工作?

+0

參見:http://stackoverflow.com/q/29345708/155423; http://stackoverflow.com/q/27893501/155423。 – Shepmaster

回答

1

我找到了解決方案。它不是由where條款做了,但這種方式:

fn g<T: A, U: A<A = T::A>>(a: T, b: U) { // where T::A is equal to B::A 
    f(a.getter(), b.getter()) 
} 
1

一個where條款正常工作:

fn g<T, U>(a: T, b: U) 
    where T: A, 
      U: A<A = T::A> // where T::A is equal to B::A 
{ 
    f(a.getter(), b.getter()) 
} 
相關問題