gpt4 book ai didi

rust - Rust:Fn成员签名中使用的Struct泛型类型参数需要命名生命周期

转载 作者:行者123 更新时间:2023-12-03 11:48:33 30 4
gpt4 key购买 nike

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

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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com