Size: a a a

RU Rust GameDev — русскоговорящее сообщество

2020 October 22

q

qthree in RU Rust GameDev — русскоговорящее сообщество
При чём тут lazy_static? у W не должно быть лайфтаймов, т.е. в неё нельзя положить референс.
источник

ВМ

Виталий Медоваров... in RU Rust GameDev — русскоговорящее сообщество
ну это и не референс
источник

q

qthree in RU Rust GameDev — русскоговорящее сообщество
Ну и поменять его как + 'static
источник

ВМ

Виталий Медоваров... in RU Rust GameDev — русскоговорящее сообщество
pub fn start_window<W: WindowHandler>() {
   let mut win = W::new();
   
        ...

   event_loop.run(move |event, _, control_flow| {
источник

q

qthree in RU Rust GameDev — русскоговорящее сообщество
W тут может быть любым типо имплементящим WindowHandler
источник

ВМ

Виталий Медоваров... in RU Rust GameDev — русскоговорящее сообщество
да, я так и хочу чтобы он был любым типом имплементящим винду хэндлер
источник

ВМ

Виталий Медоваров... in RU Rust GameDev — русскоговорящее сообщество
pub trait WindowHandler {
   const
TITLE: &'static str;
   fn
new() -> Self;
   fn update(&mut self);
   fn render(&mut self);
}
источник

q

qthree in RU Rust GameDev — русскоговорящее сообщество
Ну вот а ивэнт луп хочет чтобы этот типа не заимствовал ничего за пределами ивент лупа
источник

IB

Ilya Bogdanov in RU Rust GameDev — русскоговорящее сообщество
Ну добавь как компилятор советует W: 'static + ...
источник

q

qthree in RU Rust GameDev — русскоговорящее сообщество
а еще лучше прямо в трейт добавь баунд
источник

q

qthree in RU Rust GameDev — русскоговорящее сообщество
pub trait WindowHandler: 'static {
источник

ВМ

Виталий Медоваров... in RU Rust GameDev — русскоговорящее сообщество
ок, работает, наверное забью на свой вопрос)
источник

ВМ

Виталий Медоваров... in RU Rust GameDev — русскоговорящее сообщество
надо почитать про лайфтаймы повторно
источник

q

qthree in RU Rust GameDev — русскоговорящее сообщество
Ну вдруг у тебя там что то типа
fn new<W: WindowHandler<'_>>() -> W  {
unsafe{transmute{&*STATIC}}
}
источник

q

qthree in RU Rust GameDev — русскоговорящее сообщество
не важно
источник

q

qthree in RU Rust GameDev — русскоговорящее сообщество
Важно что winit хочет убедиться что всё переданное внутрь не заимствует снаружи
источник

q

qthree in RU Rust GameDev — русскоговорящее сообщество
Наверное потому что у функции run() возвращаемый тип !
источник

q

qthree in RU Rust GameDev — русскоговорящее сообщество
т.е. она никогда не возвращается
источник

IB

Ilya Bogdanov in RU Rust GameDev — русскоговорящее сообщество
источник

q

qthree in RU Rust GameDev — русскоговорящее сообщество
И если ты оставишь снаружи владение какими то значениями, то они никогда не дропнутся
источник