C++ 回调机制

原创 2016年02月20日 20:32:05

回调函数

回调机制,函数A的形参包含一个函数指针,函数B传入函数A中。在函数A的函数体中,满足了一定的条件后调用函数B的过程,就是回调机制。而函数B就是回调函数。
回调函数的使用场景?某函数在某个时间或者某个事件下执行,但是确定的时间我不知道,只知道会调用这个函数,那么可以使用回调函数。它被触发可能是时间或者时间或者是中断等,会有一个消息通知,来告知回调函数执行相应的操作。

函数指针

void func(int a, int b);   //函数原型
void (*fun)(int a, int b); //函数指针
typedef void (*func)(int a, int b); //func代表void func(int, int)

函数返回类型和参数类型一致,那么不同的函数可以完成不同的操作。这也是回调函数的一个函数,可以对应不同的实现。如:

#include <iostream>
typedef int (*Func)(int, int);

int minNum(int vNumA, int vNumB)
{
    return vNumA < vNumB ? vNumA : vNumB;
}

int maxNum(int vNumA, int vNumB)
{
    return vNumA > vNumB ? vNumA : vNumB;
}

int main()
{
    Func pFunc = minNum;
    //Func pFunc = maxNum;
    std::cout << pFunc(1, 2) << std::endl;

    return 1;
}

非静态成员函数

回调函数需要是全局函数或者静态函数,而不能是成员函数,因为成员函数的对象含有this指针,当传入成员函数时,this指针也被传入,造成参数不匹配。解决方法是形参多一个函数对象指针,把具体的对象传进去。

class CCallback
{
public:
    void Func(int a)
    {
        std::cout<<"member function callback called with para="<<a<<std::endl;
    }
};
typedef void (CCallback::*pMemberFunc)(int);
void Caller(CCallback* pObj,pMemberFunc p)
{
    (pObj->*p)(1);
}

int main(int argc, char* argv[])
{ 
    CCallback obj;
    Caller(&obj,&CCallback::Func);
}

参考资料

【1】https://www.zhihu.com/question/19801131
【2】http://blog.csdn.net/pi9nc/article/details/9297593
【3】http://www.cnblogs.com/qq78292959/archive/2012/10/10/2719155.html
【4】http://blog.csdn.net/xie1xiao1jun/article/details/8262902
【5】http://blog.csdn.net/ebowtang/article/details/43065277

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++中实现回调机制的几种方式

(1)Callback方式 Callback的本质是设置一个函数指针进去,然后在需要需要触发某个事件时调用该方法, 比如Windows的窗口消息处理函数就是这种类型。 比如下面的示例代码,我们...

C++简单实现回调机制

一、引言在 C++ 开发过程中,经常会遇到需要一个类在遇到某种情况下(比如触发了一个行为等等)需要驱使另一类去做某些行为的需求(也就是回调机制)。那么这个需求该如何实现呢?这里我根据自己的经验,总结了...

C++回调机制实现(转)

(1)Callback方式 Callback的本质是设置一个函数指针进去,然后在需要需要触发某个事件时调用该方法, 比如Windows的窗口消息处理函数就是这种类型。 比如下面的示例代码,我们...

C++ 事件回调机制的几种实现方式

1、duilib中的CEventSource。以下代码摘自duilib,并且有一点改动。 delegate.h #include class CDelegateBase { public: ...

C++Windows编程之回调机制

前面讲到:C++Windows编程之注册窗口类             C++Windows编程之创建窗口      ...

C/C++中Windows API 简单的(Callback)回调机制

C/C++中Windows API 简单的(Callback)回调机制

C++中实现回调机制的几种方式

C++中实现回调机制的几种方式 转载地址:http://www.cnblogs.com/weiym/archive/2012/08/28/2660053.html #include #includ...

C++中实现回调机制的几种方式

C++中实现回调机制的几种方式 (1)Callback方式 Callback的本质是设置一个函数指针进去,然后在需要需要触发某个事件时调用该方法, 比如Windows的窗口消息处理函数就是这种...

C++回调函数(2)--实现回调机制的几种方式

(1)Callback方式 Callback的本质是设置一个函数指针进去,然后在需要需要触发某个事件时调用该方法, 比如Windows的窗口消息处理函数就是这种类型。比如下面的示例代码,我们在Dow...

Java回调机制

  • 2015-11-02 20:32
  • 14KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)