传递一个指向静态方法的指针

Kol*_*nya 5 c++ pointers function-pointers pointer-to-member

为什么编译器将&Foo::foo其视为void (*)(). 我希望它被视为相反,void(Foo::*)()因为它是 的成员Foo

\n\n
class Foo\n{\n    public:\n        static void foo ( void ){}\n};\n\nvoid foo ( void(Foo::*)(void) ){}\n\nint main()\n{   \n    foo(&Foo::foo);  // error: cannot convert \xe2\x80\x98void (*)()\xe2\x80\x99 to \xe2\x80\x98void (Foo::*)()\xe2\x80\x99\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Chr*_*ris 4

您将函数 foo 声明为static

因此它不是 Foo 实例的成员函数。

这段代码的工作原理:

class Foo
{
public:
    static void foo ( void ){}
    void foo2() {}
};

void foo ( void(*)(void) ){}
void fooMember ( void(Foo::*)(void) ){}

int main()
{   
    foo(&Foo::foo);
    fooMember(&Foo::foo2); 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑:我更新了描述并添加了一段代码。