【问题标题】:How can I enforce equality of two associated type parameters of traits?如何强制特征的两个关联类型参数相等?
【发布时间】:2017-02-21 21:39:53
【问题描述】:

我有一个函数f,它接受两个相同类型的参数,还有一个函数g,它接受两个不同类型的参数,但两种类型都必须存储相同的值,以便g 可以调用ff 的参数中包含的值。我目前实现了这样的东西:

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

我必须在g 的定义中添加什么才能使其工作?

【问题讨论】:

标签: generics rust traits


【解决方案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())
}

【讨论】:

    【解决方案2】:

    我找到了解决方案。这不是由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())
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-12
      • 1970-01-01
      • 2015-09-23
      • 2022-01-17
      • 2022-12-15
      • 1970-01-01
      相关资源
      最近更新 更多