我可以在struct Route中设置Waypoint的生命周期。在结构AMoreDifferentRoute中,我使用特征Coord并获取错误
需要明确的生命周期约束
在这种情况下,如何设置特征的生命周期?
extern crate collections;
use super::wp;
use coord::Coord;
pub struct Route<'a> {
waypoints: &'a Vec<wp::Waypoint>
}
pub struct AMoreDifferentRoute<'a> {
waypoints: &'a Vec<Coord>
}
答案 0 :(得分:8)
你把它写成一个额外的特征界限:
pub struct AMoreDifferentRoute<'a> { // '
waypoints: &'a Vec<Box<Coord+'a>>
}
您需要在Box<Coord+'a>
中指定生命周期,因为可以为具有生命周期参数的结构实现特征,因此即使实际的结构类型被隐藏,也应该有一种指定此生命周期参数的方法特质对象背后。
此外,由于Coord
需要知道其组件大小才能正确地将它们放在内存中,因此您不能使用Vec
裸号Box
。因此,您需要某种包装来存储特征对象。 {{1}}会做得很好。
答案 1 :(得分:1)
由于Coord
是一个特征,您需要以某种方式将值设置为特征对象,例如Vec<Box<Coord>>
。
你还应该强烈考虑这是否真的是你想要的;通常情况并非如此。但是要做出任何判断,我需要看到更多的代码。