All*_*wer 1 function-pointers rust
有什么办法比较bar.foo来foo?
fn foo() {
}
struct Bar {
foo: &'static (dyn Fn()),
}
fn main() {
let bar = Bar { foo: &foo };
if bar.foo == foo {
println!("equal");
}
}
Run Code Online (Sandbox Code Playgroud)
(游乐场)
这给出了错误: binary operation `==` cannot be applied to type `&dyn std::ops::Fn()
这个问题不适用于我的情况。它建议尝试检查返回值或将函数转换为usize. foo不返回任何内容,bar.foo也不能强制转换为usize.
您可以通过先转换为原始指针引用测试函数指针平等:bar.foo as *const _ == &foo as *const _。
但是请注意,这不是很健壮。您很可能会遇到您希望指针相等的情况,但事实并非如此。从reddit 帖子中引用 eddyb,该帖子提出了同样的问题:
请注意,不能保证两次获得相同的函数指针 - 在将函数转换为指针时,您需要位于同一个 crate 和 codegen 单元中,才有机会。
哦,LLVM 很乐意将两个不同的函数合二为一,如果它们碰巧具有相同的主体,那么也要注意这一点。