< 返回版块

求教关于impl一个trait 的问题

fishfish 发表于

假设我有一个 trait :

tarit A<F: Fs, T: Ts> { 
 ... 
}

当我写一个struct SA时,用到一个泛型 AA,要求这个 AA 实现了 A

impl<AA: A<F, T>> SA<AA> { 
...
} 

老是提示错误...

也就是说, 我结构AA有包含泛型A,并且AA实现了 trait A, trait A又有泛型F和T,这种情况下,应该怎么写

impl 结构AA

有点迷,求指导,谢谢

评论区

XG.Ley 2018-09-13T12:04:35.009722

写了一个简易版本,不知道符不符合题意。

trait A<T: IntoIterator, U: Ord> {
    fn run(self) -> bool;
}

struct AA<T, U: Ord> {
    values: T,
    key: U,
}

impl<T, U> A<T, U> for AA<T, U>
where
    T: IntoIterator<Item = U>,
    U: Ord,
{
    fn run(self) -> bool {
        let key = self.key;
        self.values.into_iter().any(move |v| v == key)
    }
}

fn main() {
    let v = AA {
        values: vec![1, 2, 3],
        key: 2,
    };
    println!("{:?}", v.run());
}

或许楼主可以试试关联类型

作者 fishfish 2018-09-13T13:13:19.910565

差不多是这个意轏,谢谢啊,我自己写下代码试一下

laizy 2018-09-14T05:11:42.313563

你的类型得写在具体的函数下面:

trait Fs {
    fn fs(&self);
}

trait Ts {
    fn ts(&self);
}

trait A<F: Fs, T: Ts> { }

struct SA<IA> {
    t:IA,
}
impl<IA> SA<IA>  { 
    fn method_in_SA<F,T>(&self)where IA:A<F,T>, F:Fs, T:Ts {
        //...
    }
}

fn main(){}
earthengine 2018-09-14T14:59:29.343081

你的要求可以达到,但Trait约束必须使用where子句,并且要在泛型块里声明所有相关类型。

impl<AA,F,T> SA<AA>
where AA: A<F,T>, F: Fs, T: Ts
{ 
...
} 
laizy 2018-09-15T02:43:34.449578

编译通过了,再来答题可否?

@earthengine 你的要求可以达到,但Trait约束必须使用where子句,并且要在泛型块里声明所有相关类型。 impl<AA,F,T> SA where AA: A<F,T>, F: Fs, T: Ts { ... }

1 共 5 评论, 共 1 页