c – 成员函数的函数指针

我想设置一个函数指针作为类的成员,它是指向同一类中另一个函数的指针。我这样做的原因很复杂。

在这个例子中,我想输出为“1”

class A {
public:
 int f();
 int (*x)();
}

int A::f() {
 return 1;
}


int main() {
 A a;
 a.x = a.f;
 printf("%d\n",a.x())
}

但是这在编译时失败。为什么?

语法错误。成员指针是与普通指针不同的类型类别。成员指针必须与其类的对象一起使用:

class A {
public:
 int f();
 int (A::*x)(); // <- declare by saying what class it is a pointer to
};

int A::f() {
 return 1;
}


int main() {
 A a;
 a.x = &A::f; // use the :: syntax
 printf("%d\n",(a.*(a.x))()); // use together with an object of its class
}

a.x还没有说明要调用哪个对象的函数。它只是说要使用存储在对象中的指针a。前面另一个时间作为左操作数到。*操作符将告诉编译器在什么对象上调用该函数。

http://stackoverflow.com/questions/2402579/function-pointer-to-member-function

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 成员函数的函数指针