Rust:用于 Fn 成员签名的结构泛型类型参数需要命名的生命周期



我有一个带有函数成员的结构:

struct Foo<T> {
fun: Box<dyn Fn(T)>,
}
type FooI = Foo<&mut i32>;

这不起作用:

error[E0106]: missing lifetime specifier
--> src/main.rs:5:17
|
5 | type FooI = Foo<&mut i32>;
|                 ^ expected named lifetime parameter
|
help: consider introducing a named lifetime parameter
|
5 | type FooI<'a> = Foo<&'a mut i32>;

但我不希望 FooI 在 T 的生命周期内被参数化,我只希望 T 的实例比对 Foo.fun 的调用更持久。我将如何编码?

不幸的是,您正在尝试做的事情目前不适用于 Rust。当结构在引用上是泛型结构时,该引用必须至少在结构的生命周期内生存。所以,如果你听编译器,它不会做你想要的: 游乐场链接

因此,您要么必须funBox<dyn Fn(&mut T)>,要么将结构更改为通用结构。

struct Foo<T> {
fun: Box<dyn Fn(&mut T)>
}
type FooI = Foo<i32>;

游乐场链接

我还没有在上下文中看到代码,但这可能是使用特征的好机会。

最新更新