How can I enforce equality of two associated type parameters of traits?

删除回忆录丶 提交于 2019-12-31 01:44:33

问题


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:


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



回答2:


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


来源:https://stackoverflow.com/questions/42378514/how-can-i-enforce-equality-of-two-associated-type-parameters-of-traits

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!