簡體   English   中英

如何在 Rust 中將通用 function 指針存儲為“任意”?

[英]How to store generic function pointer as `any` in Rust?

我正在構建一個將函數作為輸入的板條箱。

我想隱藏 function 的類型,所以Scope不需要是通用的。

這應該沒問題,因為 function 指針是“復制”類型並且是 static。

use std::any::{Any, TypeId};
struct Scope {
   caller: &'static dyn Any,
   props_id: TypeId
}

impl Scope {
    fn new<T: 'static>(f: fn(T)) -> Self {
        let caller = f as &'static dyn Any;
        let props_id = TypeId::of::<T>();
        Self { caller, props_id }
    }

    fn call<T: 'static>(&self, val: T) {
        let caller = self.caller.downcast_ref::<fn(T)>().unwrap();
        caller(val);
    }
}

但是,我不能對 function 指針使用&'static ,並且我不能使用any不使用框的保證。 我不想使用盒子,因為fn()的類型已知的。

我將如何 go 解決此問題,甚至可能利用 function 指針的一些不安全性來使其正常工作?

我可以轉換指針類型,但我正在尋找一些不太難誤用的東西。

您可以改用&'static fn(T) 我認為沒有辦法將 function 指針本身轉換為&dyn Any

暫無
暫無

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

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