Rust 如何将存储在结构中的函数与其引用的函数进行比较
有没有办法将bar.foo与foo进行比较 这会产生错误:二进制操作“==”不能应用于类型“&dyn std::ops::Fn”Rust 如何将存储在结构中的函数与其引用的函数进行比较,rust,function-pointers,Rust,Function Pointers,有没有办法将bar.foo与foo进行比较 这会产生错误:二进制操作“==”不能应用于类型“&dyn std::ops::Fn” 不能适用于我的情况。它建议尝试检查返回值或将函数强制转换为usize。foo不返回任何内容,bar.foo不能强制转换为usize。您可以通过首先将引用转换为原始指针来测试函数指针的相等性:bar.foo as*const==&foo as*const\ 但是,请注意,这不是很可靠。你很有可能会遇到这样一种情况:你期望指针相等,但实际上并非如此。引用a中的eddyb
不能适用于我的情况。它建议尝试检查返回值或将函数强制转换为usize。foo不返回任何内容,bar.foo不能强制转换为usize。您可以通过首先将引用转换为原始指针来测试函数指针的相等性:bar.foo as*const==&foo as*const\ 但是,请注意,这不是很可靠。你很有可能会遇到这样一种情况:你期望指针相等,但实际上并非如此。引用a中的eddyb: 请注意,不能保证两次获得相同的函数指针-在将函数转换为指针时,您需要在同一个板条箱和codegen单元中才能有机会 哦和LLVM将很高兴地将两个不同的功能组合成一个,如果它们碰巧有相同的身体,那么也要注意这一点
您可以通过首先将引用转换为原始指针来测试函数指针的相等性:bar.foo as*const\u==&foo as*const\u0 但是,请注意,这不是很可靠。你很有可能会遇到这样一种情况:你期望指针相等,但实际上并非如此。引用a中的eddyb: 请注意,不能保证两次获得相同的函数指针-在将函数转换为指针时,您需要在同一个板条箱和codegen单元中才能有机会 哦和LLVM将很高兴地将两个不同的功能组合成一个,如果它们碰巧有相同的身体,那么也要注意这一点
这回答了你的问题吗@E_Net4;删除了meta-commentation No,因为这两个答案都不适用于本案例。foo不会返回,bar.foo不能被转换为USIZE这是否回答了您的问题@E_Net4;删除了meta-commentation No,因为这两个答案都不适用于本案例。foo不会返回,bar.foo不能转换为usize
fn foo() {
}
struct Bar {
foo: &'static (dyn Fn()),
}
fn main() {
let bar = Bar { foo: &foo };
if bar.foo == foo {
println!("equal");
}
}