簡體   English   中英

預期的混凝土壽命,在結構中存儲fn時找到約束壽命參數

[英]Expected concrete lifetime, found bound lifetime parameter when storing a fn in a struct

我正在嘗試將函數存儲在結構中:

trait T<'a> {}

struct A {}

struct B<'a> {
    a: &'a A
}

impl<'a> T<'a> for B<'a> {}

fn f1<'a, E: T<'a>>(a: &'a A) {}

struct D {
    f: fn(&A)
}

fn main() {
    let d = D { f: f1::<B> };
}

編譯器抱怨:

error[E0308]: mismatched types
  --> src/main.rs:18:20
   |
18 |     let d = D { f: f1::<B> };
   |                    ^^^^^^^ expected concrete lifetime, found bound lifetime parameter 
   |
   = note: expected type `fn(&A)`
   = note:    found type `fn(&A) {f1::<'_, B<'_>>}`

當您編寫f1::<B> ,編譯器將其解釋為f1::<B<'_>> ,編譯器會推斷出'_的生存期,因為B在整個生存期內都是通用的,您只能傳遞具體的類型作為類型參數。

但是,在Df字段應該是一個可以接受任何生存期的對A引用的函數。 f1::<B>不滿足該要求,因為該函數已使用特定的生存期進行了實例化。

不幸的是,目前還沒有辦法使它起作用。 Rust將必須支持更高種類的類型關聯的類型構造函數 然后,您可以在f1中將E定義為類型構造函數參數,而不是類型參數(盡管我想知道編譯器將如何處理'a lifetime參數'a )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM