我正在尝试创建一个包含其他结构列表的结构,(如果有帮助的话,可以固定大小)
struct Container<'m> {
contained: Vec<&'m Contained>,
}
struct Contained {
id: u64,
}
impl Container<'_> {
pub fn new<'m>() -> Container<'m> {
Container {
contained: Vec::new()
}
}
pub fn new_contained<'m>(&mut self, id: u64) {
let c = Contained {
id
};
self.contained.push(&c);
^^ lifetime of Contained ends here
}
}
我可以看到Contained的生命周期结束了,但是我看不到如何创建具有给定生命周期的结构。
我有其他尝试使用固定大小的数组而不是Vec的替代方法吗,这种方式是容器拥有数组的内容,但是我不能创建一个零大小的数组作为开始。
回答我自己的问题,看来Box可以满足我的要求
struct Container {
contained: Box<Option<Contained>>
}
struct Contained {
id: u64,
}
impl Container {
pub fn new() -> Container {
Container {
contained: Box::new(None),
}
}
pub fn new_contained(&mut self, id: u64) {
let c= Contained {
id
};
self.contained = Box::new(Some(c));
}
}
包含对象的生存期与容器相同。