假设我有一个 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
有点迷,求指导,谢谢
1
共 6 条评论, 1 页
评论区
写评论编译通过了,再来答题可否?
编译通过了,再来答题。
你的要求可以达到,但Trait约束必须使用where子句,并且要在泛型块里声明所有相关类型。
impl<AA,F,T> SA<AA> where AA: A<F,T>, F: Fs, T: Ts { ... }
你的类型得写在具体的函数下面:
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(){}
差不多是这个意轏,谢谢啊,我自己写下代码试一下
写了一个简易版本,不知道符不符合题意。
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()); }
或许楼主可以试试关联类型。