4
我有一个函数foo
定义如下指定的函数指针类型的寿命:在结构
fn foo<'a>(a: &'a i32, b: &i32) -> &'a i32 { a }
我想一个指针都存储在一个结构:
struct S {
f: fn(a: &i32, b: &i32) -> &i32,
}
因为有是两个输入寿命,结果寿命不能被推断:
error[E0106]: missing lifetime specifier
|
2 | f: fn(a: &i32, b: &i32) -> &i32,
| ^expected lifetime parameter
|
= help: this function's return type contains a borrowed value,
but the signature does not say whether it is borrowed from a or b
当我问comp iler为foo
的类型,它是不是非常有帮助或者:
let() = foo;
给我
expected type `fn(&'a i32, &i32) -> &'a i32 {foo}`
这显然是因为'a
不被任何定义不起作用。
那么我如何在这种情况下声明一生?尝试其中之一
f: fn<'a>(a: &'a i32, b: &i32) -> &'a i32
f<'a>: fn(a: &'a i32, b: &i32) -> &'a i32
导致语法错误,而且我无法找到涵盖此特定情况的文档。
但会意味着对''(sf)(&x,&y)'的调用在'a'和'b'的生命周期中不再是泛型的,与'foo(&x,&y)'不同。 –
太棒了!我不了解HRTB。 –