本文不涉及函数的底层实现原理,只是讲述一下一般函数指针和类成员函数指针的声明和使用。
一般函数指针相对简单,例如:
int max(int x, int y)
{
return x > y ? x : y;
}
int (*pfunc)(int, int);
pfunc= max; // 也可以pfunc = &max;
int ret = pfunc(10, 20); // 也可以(*pfunc)(10,20)
对于指向类非静态成员函数的指针,声明时需要增加类限定,使用时需要对象限定:
class A
{
public:
void fun1();
static void func2();
}
void (A::*pfunc)();
pfunc = &A::func1;
A a;
(a.*pfunc)();
A* b = &a;
(b->*pfunc)();
静态成员跟普通函数指针声明一样,赋值加类限定,使用一样:
void (*pfunc)();
pfunc = &A::func2; // 也可以pfunc =A::func2;
pfunc();