4

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?

1

2 Answers 2

4

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()) } 
Sign up to request clarification or add additional context in comments.

Comments

2

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()) } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.