繁体   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