Я хотел бы сделать что-то по следующим направлениям:Привязывание признака переменной продолжительности жизни до & само время жизни
trait GetRef<'a> {
fn get_ref(&self) -> &'a [u8];
}
struct Foo<'a> {
buf: &'a [u8]
}
impl <'a> GetRef<'a> for Foo<'a> {
fn get_ref(&self) -> &'a [u8] {
&self.buf[1..]
}
}
struct Bar {
buf: Vec<u8>
}
// this is the part I'm struggling with:
impl <'a> GetRef<'a> for Bar {
fn get_ref(&'a self) -> &'a [u8] {
&self.buf[1..]
}
Точка явного пожизненной переменной в GetRef
признака, чтобы возвращаемое значение get_ref()
на a Foo
объект, чтобы пережить сам Foo
, привязывая время жизни возвращаемого значения к времени жизни буфера Foo
.
Однако я не нашел способ реализовать GetRef
для Bar
таким образом, который принимает компилятор. Я попробовал несколько вариантов вышеизложенного, но не могу найти то, что работает. Есть ли какая-либо причина, по которой это принципиально невозможно сделать? Если нет, как я могу это сделать?
Ваш код в конце ответа в значительной степени зависит от того, что у меня есть сейчас и от чего я пытаюсь убежать. Причина, по которой я хочу сделать это, немного запутанна, но сводится к тому, что мне нужно получить кусочки, которые переживают «Foo», из которого они происходят (но не базовый буфер). – fjh
@fjh Я думаю, что ключевым моментом здесь является то, что в черте жизненное время всегда должно иметь одинаковую «форму» - это может быть либо время жизни, на которое параметризуется конструктор, либо может быть самим объектом, но он не могут быть обоим. В вашем примере, когда 'Bar' умирает *, так и буфер * - буфер не может быть дольше. – Shepmaster
@Shepmaster Да, я понимаю, что ссылка на 'Bar' не может пережить сам« Бар », но я надеялся, что есть способ заставить это работать с« Foo », не создавая для« Бар »невозможность , Я достаточно убежден, что это невозможно сделать сейчас. Баммер, однако. – fjh