将指针传递给静态方法

时间:2013-12-02 18:08:01

标签: c++ pointers function-pointers member-function-pointers

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

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

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

int main()
{   
    foo(&Foo::foo);  // error: cannot convert ‘void (*)()’ to ‘void (Foo::*)()’
    return 0;
}

1 个答案:

答案 0 :(得分:2)

您将函数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;
}

编辑:我更新了说明并添加了一段代码。