以下函数
fn ptr_of(f: impl Fn()) -> fn() {
f as fn()
}
导致此错误:
non-primitive cast: `impl Fn()` as `fn()`
我错过了什么?
语境
我尝试做的事情实际上略有不同,如下所示,但上面的例子是问题的最简单形式。
trait FnExt {
fn do_smth_with_ptr(&self);
}
impl<T: Fn()> FnExt for T {
fn do_smth_with_ptr(&self) {
let ptr: fn() = self as fn(); //error here
todo!();
}
}
fn example() {
example2.do_smth_with_ptr();
}
fn example2() {};
我期望它能起作用,因为尝试ptr_of
使用类似以下示例的特定函数是有效的:
fn test() {}
let ptr = test as fn();
Fn()
由所有不接受参数和返回单元的闭包实现,但强制类型转换“闭包作为函数指针” “仅对不捕获(关闭)任何局部变量的闭包有效”,你可以在有效强制类型转换表中查找另请参阅:为什么将闭包传递给接受函数指针的函数不起作用?