Я пытаюсь инкапсулировать выполнение цикла обработки событий Glutin/winit в пользовательском классе, описанном в разделе примеров здесь: https://docs.rs/glutin/0.26.0/glutin/window/struct.Window.html
Теперь я столкнулся с проблемой обработки прав собственности на self
членов при попытке получить к ним доступ в закрытии, переданном методу:
pub struct GameWindow {
context: ContextWrapper<PossiblyCurrent, Window>,
event_loop: EventLoop<()>,
gl: Rc<gl::Gl>,
}
impl GameWindow {
pub fn run(&self) {
self.event_loop.run(move |event, _, control_flow| {
*control_flow = ControlFlow::Poll;
match event {
Event::WindowEvent {
event: WindowEvent::CloseRequested,
..
} => {
*control_flow = ControlFlow::Exit;
}
Event::MainEventsCleared => {
unsafe {
self.gl.Clear(gl::COLOR_BUFFER_BIT);
}
self.context.swap_buffers().unwrap();
}
_ => (),
}
});
}
}
Компилятор выдает следующую ошибку: self
имеет анонимное время жизни '_
, но должно удовлетворять требованию 'static
времени жизни.
Применение этого предложения (хотя я еще не знаком со статическим временем жизни) приводит к ошибке при доступе к self.event_loop
: невозможно выйти из цикла self.event_loop, который находится за общей ссылкой.
Как правильно решить эту проблему?
EventLoop::run
потребляетself
. Вы должны владетьEventLoop
(и, следовательно,GameWindow
, который его содержит), чтобы вызывать его. - person AlphaModder   schedule 02.05.2021