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

标签 rust lifetime

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

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/

相关文章:

macros - 如何编写捕获括号的宏参数?

php - 使用 Zend_Auth 设置和延长 session 生命周期

c++ - 迭代器生命周期

string - 从 `&' 中获取比当前函数更长生命周期的 str` `String`

input - 如何从字符串中提取两个整数?

multithreading - 为什么这个变量定义意味着静态生命周期?

rust - 关闭标准输出或标准输入

linux - 使用 glibc 2.5 在 Linux 上构建 Rust 失败

C++ 了解变量生命周期和绑定(bind)生命周期之间的区别

rust - 循环中的多个可变引用