2017-02-21 15 views
3

私は同じタイプの2つの引数を取る関数fと、異なる型の2つの引数をとる関数gを持っていますが、どちらの型も同じ値を格納しなければなりません。gfに引数はfになります。どのようにして、関連する2つのタイプの形質の等価性を強制できますか?

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()) 
} 
関連する問題