我有一个函数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())
}
的定义中添加什么才能使其正常工作?
答案 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())
}