Kol*_*nya 5 c++ pointers function-pointers pointer-to-member
为什么编译器将&Foo::foo其视为void (*)(). 我希望它被视为相反,void(Foo::*)()因为它是 的成员Foo。
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}\nRun Code Online (Sandbox Code Playgroud)\n
您将函数 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)
编辑:我更新了描述并添加了一段代码。