如何强制两个相关类型的特征参数相等?

时间:2017-02-21 21:39:53

标签: generics rust traits

我有一个函数f,它接受​​两个相同类型的参数,一个函数g接受两个不同类型的参数,但两个类型都必须存储相同的值,所以{ {1}}可以使用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()) } 的定义中添加什么才能使其正常工作?

2 个答案:

答案 0 :(得分: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 :(得分: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())
}