Rust “draw”方法存在,但Vec中不满足以下特征界限<;盒子<;dyn性状>>;,你认为满意吗?

Rust “draw”方法存在,但Vec中不满足以下特征界限<;盒子<;dyn性状>>;,你认为满意吗?,rust,Rust,MyCode使用另一个库“他们的…”-特别需要的是“他们的阴影” 我正试图从MyDrawing Trait执行一个函数“draw”,我实现了这个函数 对于MyGraph结构,其中 T:他们的阴影 问题: 即使where子句要求它们的rshadow Output=theroutput,编译器也声称它不需要 the method `draw` exists but the following trait bounds were not satisfied: `<Box&

MyCode使用另一个库“他们的…”-特别需要的是“他们的阴影”

我正试图从MyDrawing Trait执行一个函数“draw”,我实现了这个函数 对于MyGraph结构,其中
T:他们的阴影

问题:
即使where子句要求它们的rshadow Output=theroutput,编译器也声称它不需要

the method `draw` exists but the following trait bounds were not satisfied:
            `<Box<dyn TheirShadow<Output = TheirOutput>> as TheirShadow>::Output = TheirOutput`
            which is required by `MyGraph<Box<dyn TheirShadow<Output = TheirOutput>>>: MyDrawing`
            `Box<dyn TheirShadow<Output = TheirOutput>>: TheirShadow`
            which is required by `MyGraph<Box<dyn TheirShadow<Output = TheirOutput>>>: MyDrawing`
方法'draw'存在,但未满足以下特征界限:
`::输出=输出`
这是“MyGraph:MyDrawing”所必需的`
`盒子:他们的阴影`
这是“MyGraph:MyDrawing”所必需的`
我正在努力弄清楚,如何写where子句,以便包含所需的特征——你对此有什么见解吗

谢谢

pub struct MyGraph<T> {
    id: i32,
    shape: T
}
pub trait MyDrawing {
    fn draw(self, distance: i32);
}

impl<T> MyDrawing for MyGraph<T> 
where
T: TheirShadow<Output = TheirOutput>
{
    fn draw(self, distance: i32){
        self.shape.cast_shadow(&distance);
        println!("Graph has a Shape with Shadow");
    }
}

fn main()
{
    let p = TheirPoint {
        x: 3,
        y: 3
    };
    
    let l = TheirLine {
        start: p,
        end: p
    };
    
    let mut vec_shapes: Vec<Box<dyn TheirShadow<Output=TheirOutput>>> = vec![Box::new(p), Box::new(l)];
    let vec_graphs: Vec<MyGraph<Box<dyn TheirShadow<Output=TheirOutput>>>> = createGraph(vec_shapes);
    for graph in vec_graphs {
        graph.draw(&3);
    }
}


fn createGraph<T>(shapes: Vec<T>) -> Vec<MyGraph<T>>
 {
    let mut graphs = vec![];
    let mut i = 0;
    for shape in shapes{

        let graph = MyGraph {
             id: i,
             shape: shape
        };
    
        graphs.push(graph);
        let mut i = i+1;
    }
    graphs
}


pub-struct-MyGraph{
id:i32,
形状:T
}
pub-MyDrawing{
fn绘制(自身,距离:i32);
}
为MyGraph导入MyDrawing
哪里
T:他们的阴影
{
fn绘制(自身,距离:i32){
自我。形状。投射阴影(&距离);
println!(“图形具有带阴影的形状”);
}
}
fn main()
{
设p=TheirPoint{
x:3,
y:3
};
设l=他们的直线{
开始:p,
完:p
};
让mut-vec_形状:vec=vec![Box::new(p),Box::new(l)];
设vec_图形:vec=createGraph(vec_图形);
关于向量图中的图{
图3;
}
}
fn createGraph(形状:Vec)->Vec
{
设mut图=vec![];
设muti=0;
形状中的形状{
let graph=MyGraph{
id:我,
形状:形状
};
推(图);
设muti=i+1;
}
图
}

根据马斯克林建议的答案,以下方法有效

impl MyGraph的MyDrawing
哪里
T:他们的阴影+?大小
{
fn绘制(自身,距离:i32){
自我。形状。投射阴影(&距离);
println!(“图形具有带阴影的形状”);
}
}
MyGraph
仅在
T:MyShadow
时实现
draw
,但trait对象不实现trait OOTB,因此
Box
可能无法实现
其阴影
。看见
impl<T> MyDrawing for MyGraph<Box<T>> 
where
T: TheirShadow<Output = TheirOutput> + ?Sized
{
    fn draw(self, distance: i32){
        self.shape.cast_shadow(&distance);
        println!("Graph has a Shape with Shadow");
    }
}