< 返回版块

rust-dev 发表于 2022-10-01 15:11

pub struct A(u64);

pub trait T1 { fn test() -> F; }

pub trait T2 {}

impl T2 for A {}

pub struct B(T);

impl<T:T2> T1 for B{ fn test() -> T { A(5) //error } }

评论区

写评论
cococc 2022-10-02 11:29

优秀

--
👇
苦瓜小仔: 从入门的泛型语法开始学习。如果只是一个纯粹的练习,一个近似的东西可以是

pub struct A(u64);

pub trait T1<T> {
    fn test() -> T;
}

pub trait T2 {}

impl T2 for A {}

pub struct B<T>(T);

impl T1<A> for B<A> {
    fn test() -> A { A(5) }
}

这只用到了简单的类型泛型和 trait 实现。

c5soft 2022-10-02 08:08

main.rs这样写就可以编译通过了:

pub struct A(u64);

pub trait T1<F> {
    fn test() -> F;
}

pub trait T2 {}

impl T2 for A {}

pub struct B<T>(T);

impl T1<A> for B<A> {
    fn test() -> A {
        A(5)
    }
}

fn main() {
    println!("done");
}

苦瓜小仔 2022-10-01 15:48

想要 impl<T: T2> T1 for B 所表达的功能,可能写这样的代码

pub struct A(u64);

pub trait T1<T> {
    fn test() -> T;
}

pub trait T2 {
    fn new() -> Self;
}

impl T2 for A {
    fn new() -> Self { A(5) }
}

pub struct B<T>(T);

impl<T: T2> T1<T> for B<T> {
    fn test() -> T { T::new() }
}
苦瓜小仔 2022-10-01 15:41

从入门的泛型语法开始学习。如果只是一个纯粹的练习,一个近似的东西可以是

pub struct A(u64);

pub trait T1<T> {
    fn test() -> T;
}

pub trait T2 {}

impl T2 for A {}

pub struct B<T>(T);

impl T1<A> for B<A> {
    fn test() -> A { A(5) }
}

这只用到了简单的类型泛型和 trait 实现。

1 共 4 条评论, 1 页