不能使用带有未推断的泛型参数的trait的关联类型?
创始人
2024-12-27 06:01:10
0

产生这个问题的原因是在使用 trait 声明关联类型时,它的参数是未知的。在函数调用中推断泛型参数可以解决这个问题。

以下是一个示例代码,其中的 Associated trait 声明了一个关联类型 Output

trait Associated {
    type Output;
    fn associated(&self, t: T) -> Self::Output;
}

fn foo>(a: A, t: T) -> A::Output {
    a.associated(t)
}

struct MyType(u32);

impl Associated for MyType {
    type Output = (T, u32);
    fn associated(&self, t: T) -> Self::Output {
        (t, self.0)
    }
}

fn main() {
    let mytype = MyType(42);
    let result = foo(mytype, "hello");
    println!("result = {:?}", result);
}

在这里,foo 函数是泛型的,并返回一个 A::Output 类型的值,其中 A 必须是实现了 Associated trait 的类型。

MyType 结构体实现了 Associated,其中 Output 被定义为一个元组 (T, u32),函数 associated 将构造和返回该元组。

main 函数中,使用 MyType 的实例调用 foo,并传递 "hello" 的字符串字面量作为第二个参数。由于 foo 函数中的 T 是从参数推断获得的,因此没有未推断的泛型参数,所以不会出现编译错误。

相关内容

热门资讯

安卓换鸿蒙系统会卡吗,体验流畅... 最近手机圈可是热闹非凡呢!不少安卓用户都在议论纷纷,说鸿蒙系统要来啦!那么,安卓手机换上鸿蒙系统后,...
安卓系统拦截短信在哪,安卓系统... 你是不是也遇到了这种情况:手机里突然冒出了很多垃圾短信,烦不胜烦?别急,今天就来教你怎么在安卓系统里...
app安卓系统登录不了,解锁登... 最近是不是你也遇到了这样的烦恼:手机里那个心爱的APP,突然就登录不上了?别急,让我来帮你一步步排查...
安卓系统要维护多久,安卓系统维... 你有没有想过,你的安卓手机里那个陪伴你度过了无数日夜的安卓系统,它究竟要陪伴你多久呢?这个问题,估计...
windows官网系统多少钱 Windows官网系统价格一览:了解正版Windows的购买成本Windows 11官方价格解析微软...
安卓系统如何卸载app,轻松掌... 手机里的App越来越多,是不是感觉内存不够用了?别急,今天就来教你怎么轻松卸载安卓系统里的App,让...
怎么复制照片安卓系统,操作步骤... 亲爱的手机控们,是不是有时候想把自己的手机照片分享给朋友,或者备份到电脑上呢?别急,今天就来教你怎么...
安卓系统应用怎么重装,安卓应用... 手机里的安卓应用突然罢工了,是不是让你头疼不已?别急,今天就来手把手教你如何重装安卓系统应用,让你的...
iwatch怎么连接安卓系统,... 你有没有想过,那款时尚又实用的iWatch,竟然只能和iPhone好上好?别急,今天就来给你揭秘,怎...
iphone系统与安卓系统更新... 最近是不是你也遇到了这样的烦恼?手机更新系统总是失败,急得你团团转。别急,今天就来给你揭秘为什么iP...