你如何设置Rust特性的寿命?

时间:2014-10-12 16:53:33

标签: rust traits

我可以在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>
}

2 个答案:

答案 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>>

你还应该强烈考虑这是否真的是你想要的;通常情况并非如此。但是要做出任何判断,我需要看到更多的代码。

相关问题