generics - 如何强制特征的两个关联类型参数相等?

标签 generics rust traits

我有一个函数 f 接受两个相同类型的参数,还有一个函数 g 接受两个不同类型的参数,但是这两种类型都必须存储相同的值,因此 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())
}

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

最佳答案

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

关于generics - 如何强制特征的两个关联类型参数相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42378514/

相关文章:

generics - 返回通用 Vec

methods - 一个 Rust 类型之谜 : Convert a function to a method, 和调用函数的签名破坏了编译

rust - Rust 如何在没有重载函数的情况下设法拥有泛型?

rust - 如何使用退出代码干净地结束程序?

compiler-errors - 奇怪地重复出现的通用特征模式 : overflow evaluating the requirement

c# - C# 泛型约束 "T,K: where T : It<K>"的 Java 等价物是什么?

c# - 设计流畅的界面方法

c# - C# 中 Cast<T>() 或 List<T> 中的 <T> 是什么

java - 覆盖下限参数

rust - 如何在选项中引用特征对象?