我正在尝试创建一个列表,其中包含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)>;
这使我得到了一个“缺少生命周期说明符”的错误。 我可以在
TestRef
上放置一个生命周期参数来让它工作,但那不是正确的生命周期。 我不想让&GameData
在CallbackTest
的整个生命周期内都存在,只需要在函数调用期间存在。编辑:&GameData是有意的,这不是一个错误。 我希望我的更改能够更清楚地表达背后的目标。
有什么建议吗?
u32
添加了另一个引用层。在这种情况下,编译器要求寿命是正确的。 - Boiethios&u32
是有意为之的。我将其更改为更明确地表明我正在尝试传递一个包含多个值的元组,其中一个是引用。 - BinderNews&u32
在整个CallbackTest
的生命周期中都存在,只需要在函数调用期间存在。 @ÖmerErden的建议对您有帮助吗? - trent