Я пытаюсь создать список, который будет содержать Box<dyn Fn(&E)>
, где E
указано как часть типа. Это работает до тех пор, пока E
не содержит ссылку, после чего он начинает запрашивать не относящиеся к жизни времена.
Более простой пример:
pub struct CallbackTest<E> {
pub cb: Box<dyn Fn(&E)>,
}
impl<E> CallbackTest<E> {
pub fn new<F>(cb: F) -> Self
where
F: Fn(&E)
{
Self { cb: Box::new(cb) }
}
}
pub struct GameData { /* ... */ }
pub type TestRef = CallbackTest<(u32, &GameData)>;
Это дает мне missing lifetime specifier
ошибка. Я мог бы поставить параметр времени жизни на TestRef
, чтобы заставить его работать, но это не правильный срок жизни. Я не хочу, чтобы &GameData
жил в течение всего времени жизни CallbackTest
, только во время вызова функции.
РЕДАКТИРОВАТЬ: & GameData является преднамеренным. Это не ошибка. Я надеюсь, что мои изменения сделали цель этого более очевидной.
Любой совет?