Rust 如何将存储在结构中的函数与其引用的函数进行比较

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

有没有办法将bar.foo与foo进行比较

这会产生错误:二进制操作“==”不能应用于类型“&dyn std::ops::Fn”


不能适用于我的情况。它建议尝试检查返回值或将函数强制转换为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");
    }
}