回调函数简介

2017-04-20  本文已影响0人  comma01

C++回调函数相关

1. 首先还是由最基本的"Hello World!"程序引入

#include <iostream>

int main()
{
    std::cout << "Hello World!" << std::endl;

    return 0;
}

2. 接下来实现一个简单的函数调用输出"Hello World!"

#include <iostream>

void sayHello(string s)
{
    std::cout << s << std::endl;
}

int main()
{
    sayHello("Hello World!");

    return 0;
}

3. 接下来说明一下有关于函数类型这一概念

所谓的函数的类型,包含了两个部分(它的申明类型和调用所需的形参列表),如对我们上文中的sayHello为例,sayHello函数的类型就为"void (string)"

有了对函数类型的理解,接着我们就可以申明一个指向函数的指针,以sayHello函数为例:

void (*fp) (string); // fp为void (string)类型的指针,还未指向相应的对象
fp = sayHello;

通过调用fp完成输出"Hello World!"代码如下:

#include <iostream>

void sayHello(string s)
{
    std::cout << s << std::endl;
}

int main()
{
    //void (*fp) (string);  // 声明一个函数指针
    fp = sayHello;
    auto fps = sayHello;    // c++11新用法

    fp("Hello ");
    fps("World!");

    return 0;
}

上述代码还是补充了C++11的新特性auto,有兴趣可以自己去了解一下

4. 下面就可以很容易的理解回调函数的概念了

所谓回调函数,简单的说就是对于一个现有系统所提供的接口,用户可以自行定义一个函数作为其形参,以函数指针的形式传入,而具体在合适使用该自定义函数由系统接口内部自行决定

再形象一点地说,你去饭店预订餐桌,留下手机号,你的手机号就是所谓的回调函数,有餐桌则通过手机号与你联系,这就是调用回调函数

下面给出简单的利用回调函数"Hello World"

#include <iostream>

void sayHello(string s)
{
    std::cout << s << std::endl;
}

void callback(void (*callfunc)(string), string s)
{
    callfunc(s);
}

int main()
{
    auto fps = sayHello;      // c++11新用法

    callback(fps, "this is callback func!");

    return 0;
}

这里需要注意的的是,在sayHello函数中是有参数string s需要传入的,callback函数的第一个参数只是一个指向sayHello函数内存地址的函数指针,其并不带参数,如果callback没有第二个参数string s的话,则无法进行调用。

PS:慢慢开始养成写博客的习惯吧,不然越来越懒了233333

上一篇 下一篇

猜你喜欢

热点阅读