2017-02-21 61 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()) 
} 
相关问题