Reputation: 962
I have a function f
which takes two arguments of the same type, and a function g
which takes two arguments of different types, but both types have to store the same value, so that g
can call f
with the values contained in the arguments to f
. I currently implemented something like this:
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())
}
What do I have to add to the definition of g
to make it work?
Upvotes: 4
Views: 900
Reputation: 430310
A where
clause works fine:
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())
}
Upvotes: 4
Reputation: 962
I found a solution. It's not done by a where
clause, but this way:
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())
}
Upvotes: 2