回调函数的一些总结

  前两天的一个任务中用到回调函数,我是在MFC上做的。遇到的问题是我想把回调函数作为CDialog类的成员函数,因为在回调函数中我必须用到CDialog类的变量,但是这样会出现问题,连编译都通不过。

  后来查了资料,原来回调函数是基于C编程的Windows SDK的技术,不是针对C++的。可以将一个C函数直接作为回调函数,但是如果试图直接使用C++的成员函数作为回调函数将发生错误。在C++中的成员函数都隐含了一个参数即this指针。

  解决方案:

  1、直接用普通的C函数作为回调函数,若在C中要访问类成员,将该C函数作为类的有元函数即可。我使用的方法是:在C函数中不访问类成员,将要传递给类成员的值赋给全局变量,在Post消息给类,让该类执行相应的操作(将全局变量的值赋值给成员变量等)。

  2、使用静态成员函数作为回调函数,静态成员函数不使用this指针作为隐含参数。但是静态成员函数对于类成员的访问也是受限制的,这一点我们要注意。

 

对于静态成员函数,想起了之前遇到的一个问题:

简单的写写,明白意思就行:

class B;

 class  A:

{

     B *b;

 

    public:

    Add(){};

 

    b->Sub();            //在这里调用的时候就会出现问题

}

 

class B:

{

    A   a;

 

    public:

    Sub(){};

 

    a.Add();

   

}

 

  现在明白是为什么了,应该将Sub()作为A类的静态成员函数。静态成员是类创建的时候就有的,而其他成员都是要在创建对象的时候才创建的。在怎个过程中并没有创建B对象,因此我们也就只能使用类B的静态成员。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值