在一个类中如果要使用一个函数类型如回调函数,常见的做法是定义一个静态函数类型来匹配函数指针类型。定义静态函数的方法有时会偏离OO思想,影响类结构层次的设计。这里介绍一种方法,它使函数指针可能存在于对象之中。
#include<iostream>
using namespace std;
class test
{
public:
test(int sel)
{
mf = sel?(&test::f1):(&test::f2);
}
void Run()
{
(this->*mf)();
}
private:
typedef void (test::*TFUN)(void);
TFUN mf;
void f1(void)
{
printf("f1\n");
}
void f2(void)
{
printf("f2\n");
}
};
int _tmain(int argc, _TCHAR* argv[])
{
test t1(1), t2(0);
t1.Run();
t2.Run();
return 0;
}