比如
// 需要实现交换律的trait
// 判断两个几何图形是否相交
pub trait Intersect<T> {
fn intersect(&self, rhs:T)->bool;
}
// 实现判断射线与线段是否相交的代码
impl Intersect<&LineSegment> for HalfLine {
fn intersect(&self, ls: &LineSegment) -> bool {
todo!()
}
}
// 实现判断线段与射线是否相交的代码
// 这一部分希望能自动实现
impl Intersect<&HalfLine> for LineSegment{
fn intersect(&self, rhs:&HalfLine)->bool {
rhs.intersect(self)
}
}
1
共 5 条评论, 1 页
评论区
写评论Intersect<T>
缺少约束,T代表任意类型,所以没办法impl<T, U> Intersect<U> for T
,这里U也是T。 可以从现实出发,你的图像虽然是两个不同类型,但按理应该实现了某个Trait,这里假如是Area,那么就比较顺理成章了。有个稍微有点狂野的路子,是写个macro来生成代码。
相互实现from不就完了么?
退而求其次不再报错,但是很危险,一不留神就写错导致爆栈了:
--
👇
liyiheng: 我尝试这么写会报错,重复实现 trait。 也许可以参考 From 和 Into 分成两个 trait
我尝试这么写会报错,重复实现 trait。 也许可以参考 From 和 Into 分成两个 trait