как я могу указать время жизни полностью содержащейся структуры в ржавчине без особых ошибок - PullRequest
0 голосов
/ 06 октября 2019

Я пытаюсь создать структуру, которая содержит список других структур (может быть фиксированный размер, если это помогло)

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 заканчивается, но я не вижукак создать структуру с заданным временем жизни.

Есть ли у меня какие-либо альтернативы, которые я пробовал использовать вместо фиксированного размера массива, таким образом Контейнер владеет содержимым массива, но я не могу создать нулевой размермассив для начала.

1 Ответ

0 голосов
/ 06 октября 2019

Отвечая на мой собственный вопрос, кажется, что 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));
    }
}

Содержится, как представляется, живет так же, как контейнер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...