我如何指定没有针刺的锈蚀中完全包含的结构的寿命

问题描述 投票:0回答:1

我正在尝试创建一个包含其他结构列表的结构,(如果有帮助的话,可以固定大小)

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的替代方法吗,这种方式是容器拥有数组的内容,但是我不能创建一个零大小的数组作为开始。

rust
1个回答
0
投票

回答我自己的问题,看来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));
    }
}

包含对象的生存期与容器相同。

© www.soinside.com 2019 - 2024. All rights reserved.