1.回调函数的理解

回调函数是通过函数指针的方式调用函数(关于函数指针的理解):把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数的时,这个函数就被称为是回调函数。回调函数不是由函数的实现方直接调用,而是在特定的时间或者条件发生是由另外一方调用的,用于对该事件或条件进行相应。
我们可以简单理解为当一个函数的参数是另一个函数的指针时,这个函数我们成为回调函数

2.使用

#include <QtCore/QCoreApplication>
#include <stdio.h>
#include <QDebug>

typedef void(*fun)(int); //定义一个函数指针

fun p = NULL;


void caller(fun pCallBack)
{
    p = pCallBack;
    int result = 1;
    return (*p)(result);
}

void callBack(int a)//回调函数
{
    qDebug ()<<"a value is "<<a;
}


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    caller (callBack);


    return a.exec();
}

注意: 如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过。其错误是普通的C++成员函数都隐含了一个传递函数作为参数,亦即“this”指针,C++通过传递this指针给其成员函数从而实现程序函数可以访问C++的数据成员。这也可以理解为什么C++类的多个实例可以共享成员函数却-有不同的数据成员
如果在类中我们可以将回调函数声明成static 静态成员函数 或者将回调函数声明成全局的函数。

发表评论

电子邮件地址不会被公开。 必填项已用*标注