关于函数指针一般使用就不多说了,直接给个通用类型:typedef 返回类型(*新类型)(参数表)。
而在类中使用 通用类型是 typedef 返回类型(类名::*新类型)(参数表)。
以下是个人使用的例子,结构体内放 类指针、函数(即任务),主要是因为刚刚开始使用线程池,
通过postthreadmessage向线程发送任务,lparam里面放结构体指针。
使用线程池不是很熟悉,练一下手;
结果碰到函数指针问题,就找了一些资料,发现很多网上例子编译有问题。
就将个人使用的例子写了一个,希望有人用到。
请注意看注释部分。
class test{
public:
void fun(int param){int tmp =param;}
};
typedef void (test::*fp)(int);
typedef struct _CMDData{
test *pClass;
fp Proc;
}CMDData;
int main()
{
test Object;
fp newfp = test::fun;
(Object.*newfp)(123); // 第一对括号位置使用时请注意,
// 使用 Object.(*newfp)(123);将会编译出错,这个也是网上例子出现的出错。
CMDData docmd;
docmd.pClass =&Object;
docmd.Proc = &test::fun;
(docmd.pClass->*docmd.Proc)(123); // 第一对括号位置使用时请注意
return 0;
}