我有一个带有函数成员的结构:
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>;
但是我不希望在T的生存期内对FooI进行参数化,我只希望T的实例比对Foo.fun的调用有效。我该如何编码?
最佳答案
不幸的是,您要尝试执行的操作目前无法在Rust上使用。当某个结构在引用上是通用的时,该引用至少在该结构的生命期内必须存在。因此,如果您收听编译器,它将无法执行您想要的操作:
playground link
因此,您要么必须将fun
设置为Box<dyn Fn(&mut T)>
,要么将您的结构更改为通用。
struct Foo<T> {
fun: Box<dyn Fn(&mut T)>
}
type FooI = Foo<i32>;
Playground Link
我没有在上下文中看到代码,但这可能是使用traits的好机会。
关于rust - Rust:Fn成员签名中使用的Struct泛型类型参数需要命名生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62227107/